1. 程式人生 > 其它 >JAVA 資訊查詢介面

JAVA 資訊查詢介面

執行效果

程式碼

package JAVA.test;

import com.mysql.jdbc.Connection;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashSet;
import java.util.Set;

public class demo1 {

    demo1(){
        getConn();
        ui();
    }

    JTextField stu_id;
    JButton query,add,alter,del,enadd,enalter,cancel;

    int add_num,sel_num=-1;
    Boolean Editable = false;
    DefaultTableModel dfm = new DefaultTableModel(){
        @Override
        public boolean isCellEditable(int row, int col) {
            if (col == 0) {
                return true;
            }
            if (row == add_num){
                return Editable;
            }
            if (row == sel_num){
                return Editable;
            }
            return false;
        }
    };
    JTable info = new JTable(dfm);
    final String[] info_rows = {"","學號","姓名","性別","年齡","班級"};
    void ui(){
        JFrame jf = new JFrame("資訊查詢");
        JPanel jp = new JPanel();

        jp.add(new JLabel("學號:"));
        jp.add(stu_id=new JTextField(10));
        jp.add(query=new JButton("查詢"));

        get_content("");
        JScrollPane sp = new JScrollPane(info);
        jp.add(sp);

        jp.add(add=new JButton("新增"));
        jp.add(alter=new JButton("修改"));
        jp.add(del=new JButton("刪除"));

        jp.add(enadd=new JButton("確認新增"));
        jp.add(enalter=new JButton("確認修改"));
        jp.add(cancel=new JButton("取消"));

        setButton(select_Modle);

        listen lis = new listen();
        add.addActionListener(lis);
        alter.addActionListener(lis);
        del.addActionListener(lis);
        enadd.addActionListener(lis);
        enalter.addActionListener(lis);
        cancel.addActionListener(lis);


        info.addMouseListener(new mlisten());

        jf.add(jp);
        jf.setSize(500,550);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

   //連線資料庫
    Connection conn;
    ResultSet rs;
    void getConn(){
        String user = "root";
        String passwd = "li123...";
        String url = "jdbc:mysql://localhost:3306/student";
        String driver= "com.mysql.jdbc.Driver";
        try {
            Class.forName(driver);
            conn = (Connection) DriverManager.getConnection(url,user,passwd);
        } catch (ClassNotFoundException e) {
            msg("資料庫驅動未找到"+e.getMessage());
        } catch (SQLException throwables) {
            msg("資料庫連線失敗"+throwables.getMessage());
        }
    }

    //查詢資料,並以陣列方式返回
    Object[][] query(String stu_id) throws SQLException {
        String sql = "select * from student where id like'" + stu_id + "%';";
        int i, j = 0;
        String id, name, sex, age, class_name;
        rs = conn.createStatement().executeQuery(sql);
        rs.last();
        i = rs.getRow();
        rs.beforeFirst();
        Object[][] obj = new Object[i][info_rows.length];
        while (j<i) {
            rs.next();
            id = rs.getString(1);
            name = rs.getString(2);
            sex = rs.getString(3);
            age = rs.getString(4);
            class_name = rs.getString(5);
            obj[j] = new Object[]{false, id, name, sex, age, class_name};
            j++;
        }
        return obj;
    }

    //驗證學號是否存在
    boolean verfiy(String id) {
        boolean b = false;
        String sql = "select * from student where id='"+id+"';";
        try {
            if(conn.createStatement().executeQuery(sql).next()){
                b=true;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return b;
    }


    //更新資料
    final int add_modle = 0;
    final int alter_modle = 1;
    void update(int row,int modle) {
        Object[] data = input_val(row);
        String sql = "";
        String msg="";
        if (modle==add_modle){
            sql = "insert into student values(?,?,?,?,?)";
            if (verfiy((String) data[1])){
                msg("學號已存在!");
                return;
            }
            msg="新增";
        }else if (modle==alter_modle){
            sql = "update student set id=?,name=?,sex=?,age=?,class=? where id=?";
            msg="修改";
        }
        try {
            PreparedStatement psm = conn.prepareStatement(sql);
            for (int i = 1; i < data.length; i++) {
                psm.setString(i, (String) data[i]);
                if (modle==alter_Modle){
                    psm.setString(6, (String) data[1]);
                }
            }
            psm.executeUpdate();
            msg(msg+"成功!");
        } catch (SQLException throwables) {
            msg(msg+"失敗!"+throwables.getMessage());
        }
    }

    Set<Integer> rows = new HashSet<>();
    //刪除資料
    void delete(){
        String sql = "delete from student where id =?";
        String id = "";
        try {
            for (Integer row : rows) {
                id = (String) dfm.getValueAt(row,1);
                PreparedStatement psm = conn.prepareStatement(sql);
                psm.setString(1,id);
                psm.executeUpdate();
            }
            msg("刪除了"+rows.size()+"條資料");
            rows.clear();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

    //獲取輸入的內容
    Object[] input_val(int row){
        Object[] obj = new Object[info_rows.length];
        for (int i = 0; i < obj.length; i++) {
            obj[i] = dfm.getValueAt(row,i);
        }
        return obj;
    }


    //重新整理表格內容
    void get_content(String id){
        try {
            dfm.setDataVector(query(id),info_rows);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        TableColumn col = info.getColumnModel().getColumn(0);
        col.setCellRenderer(info.getDefaultRenderer(Boolean.class));
        col.setCellEditor(info.getDefaultEditor(Boolean.class));
    }


    //控制按鈕

    final int select_Modle = 1;
    final int add_Modle = 2;
    final int alter_Modle=3;
    final int del_Modle=4;
    final int dels_Modle=5;
    void setButton(int model){
        switch (model){
            case select_Modle:
                add.setEnabled(true);
                alter.setEnabled(true);
                del.setEnabled(true);
                enadd.setVisible(false);
                enalter.setVisible(false);
                cancel.setVisible(false);
                break;
            case add_Modle:
                add.setEnabled(false);
                alter.setEnabled(false);
                del.setEnabled(false);
                enalter.setVisible(false);
                enadd.setVisible(true);
                cancel.setVisible(true);
                break;
            case alter_Modle:
                add.setEnabled(false);
                del.setEnabled(false);
                alter.setEnabled(false);
                enadd.setVisible(false);
                enalter.setVisible(true);
                cancel.setVisible(true);
                break;
            case del_Modle:
                add.setEnabled(false);
                alter.setEnabled(false);
                del.setEnabled(true);
                cancel.setVisible(false);
                enalter.setVisible(false);
                enadd.setVisible(false);
                break;
        }

    }


    void msg(String msg){
        JOptionPane.showMessageDialog(null,msg);
    }

    class listen implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            Object source = e.getSource();
            if (source.equals(query)){
              setButton(select_Modle);
              get_content(stu_id.getText());
            } else if (source.equals(add)){
                setButton(add_Modle);
                dfm.addRow(new Object[info_rows.length]);
                add_num=dfm.getRowCount()-1;
                dfm.setValueAt(false,add_num,0);
                Editable=true;
            }else if (source.equals(alter)){
                setButton(alter_Modle);
                sel_num = info.getSelectedRow();
                Editable=true;
            }else if (source.equals(del)){
                delete();
                get_content("");
            }else if (source.equals(enadd)){
                update(add_num,add_modle);
                get_content("");
                setButton(select_Modle);
                Editable=false;
                add_num=-1;
            }else if (source.equals(enalter)){
                update(sel_num,alter_Modle);
                get_content("");
                Editable=false;
                sel_num=-1;
                setButton(select_Modle);
            }else if (source.equals(cancel)){
                get_content("");
                setButton(select_Modle);
            }
        }
    }

    class mlisten implements MouseListener{
        void select_rows(){
            int row = info.getSelectedRow();
            Object val = dfm.getValueAt(row, 0);
            if (val.equals(true)){
                rows.add(row);
            }else if (val.equals(false)){
                rows.remove(row);
            }
            if (rows.size()>1){
                setButton(del_Modle);
            }else if (rows.size()==1){
                setButton(select_Modle);
            }else if (rows.size()>=10){
                msg("最多隻能選"+rows.size()+"項");
            }
        }
        @Override
        public void mouseClicked(MouseEvent e) {

        }

        @Override
        public void mousePressed(MouseEvent e) {

        }

        @Override
        public void mouseReleased(MouseEvent e) {
            select_rows();

        }

        @Override
        public void mouseEntered(MouseEvent e) {

        }

        @Override
        public void mouseExited(MouseEvent e) {

        }
    }

    public static void main(String[] args) {
        new demo1();
    }

}