JAVA 資訊查詢介面
阿新 • • 發佈:2021-06-21
執行效果
程式碼
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(); } }