Hiển thị dữ liệu – Xữ lý truy vấn trên Giao diện

 
package thongtinxe;

//Ctrl + Shift + I để Import

public class giaodien extends JFrame implements ActionListener {

 private JTable table = new JTable();

 private JTextField txtmaxe = new JTextField();

 private JTextField txttenxe = new JTextField();

 private JLabel lbNof = new JLabel();

 mysql sql = new mysql();

 public giaodien(String title) {

     super(title);

     add(createMainPanel(table, createTitlePanel("THÔNG TIN XE"), createControlPanel()));

     sql.connect();

     setSize(320, 320);
     setVisible(true);
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     setLocationRelativeTo(null);

     getRowInfo();
     loadData();
 }

 private JPanel createMainPanel(JTable table, JPanel panelLabel, JPanel panelControl) {
     JPanel panel = new JPanel(new BorderLayout());
     panel.add(createBlankPanel(), BorderLayout.WEST);
     panel.add(createBlankPanel(), BorderLayout.EAST);
     panel.add(panelLabel, BorderLayout.NORTH);
     panel.add(createPanelTable(table), BorderLayout.CENTER);
     panel.add(panelControl, BorderLayout.SOUTH);
     return panel;
 }

 public JPanel createTitlePanel(String title) {
     JPanel mainPanel = new JPanel();
     JLabel lbTitle = new JLabel(title);
     lbTitle.setForeground(Color.BLUE);
     Font font = new Font("arial", Font.BOLD, 25);
     lbTitle.setFont(font);
     mainPanel.add(lbTitle, BorderLayout.NORTH);
     return mainPanel;
 }

 private JPanel createControlPanel() {

     JPanel panelButton = new JPanel(new BorderLayout());

     JPanel panel4 = new JPanel(new GridLayout(1, 3, 10, 10));
     panel4.add(createButton("Insert"));
     panel4.add(createButton("Update"));
     panel4.add(createButton("Delete"));

     JPanel panel = new JPanel(new GridLayout(1, 1, 10, 10));
     panel.add(panel4);

     autoSortPanel(panelButton, panel);

     JPanel panelLeft = new JPanel(new GridLayout(2, 1, 5, 5));
     JLabel lbmapb = new JLabel("Mã xe ");
     panelLeft.add(lbmapb);
     JLabel lbtenpb = new JLabel("Tên xe ");
     panelLeft.add(lbtenpb);

     JPanel panelRight = new JPanel(new GridLayout(2, 1, 5, 5));
     panelRight.add(txtmaxe = new JTextField());
     panelRight.add(txttenxe = new JTextField());

     JPanel panelField = new JPanel(new BorderLayout());
     panelField.add(panelRight, BorderLayout.CENTER);
     panelField.add(panelLeft, BorderLayout.WEST);

     JPanel panelNof = new JPanel(new FlowLayout());
     panelNof.add(lbNof);

     JPanel mainPanel = new JPanel(new BorderLayout());
     autoSortPanel(mainPanel, panelField);
     mainPanel.add(panelNof, BorderLayout.NORTH);
     mainPanel.add(panelField, BorderLayout.CENTER);
     mainPanel.add(panelButton, BorderLayout.SOUTH);

     return mainPanel;
 }

 private void autoSortPanel(JPanel main, JPanel panel) {
     main.add(createBlankPanel(), BorderLayout.NORTH);
     main.add(createBlankPanel(), BorderLayout.WEST);
     main.add(createBlankPanel(), BorderLayout.EAST);
     main.add(panel, BorderLayout.CENTER);
     main.add(createBlankPanel(), BorderLayout.SOUTH);
 }

 private JPanel createBlankPanel() {
     JPanel panel = new JPanel();
     return panel;
 }

 private JPanel createPanelTable(JTable table) {
     JPanel panel = new JPanel(new GridLayout(1, 1));
     panel.add(new JScrollPane(table));
     return panel;
 }

 private JButton createButton(String text) {
     JButton btn = new JButton(text);
     btn.addActionListener(this);
     return btn;
 }

 private void loadData() {    
     DefaultTableModel model = new DefaultTableModel();

     String sqlCommand = "select * from thongtinxe";

     ResultSet rs = sql.getData(sqlCommand);

     try {
         ResultSetMetaData rsmd = rs.getMetaData();

         int colNumber = rsmd.getColumnCount();
         String[] array = new String[colNumber];
         for (int i = 0; i < colNumber; i++) {
         array[i] = rsmd.getColumnName(i + 1);
     }

     model.setColumnIdentifiers(array);

     while (rs.next()) {
         for (int i = 0; i < colNumber; i++) {
             array[i] = rs.getString(i + 1);
         }
         model.addRow(array);
     }

     } catch (SQLException ex) {
         Logger.getLogger(giaodien.class.getName()).log(Level.SEVERE, null, ex);
     }

     table.setModel(model);

 }

 private thongtinxe getThongtinxe() {
     int maxe;
     try {
         maxe = Integer.parseInt(txtmaxe.getText().trim().toUpperCase());
     } catch (Exception e) {
         return null;
 }

     String tenxe = txttenxe.getText().trim().toUpperCase();
     thongtinxe pb = new thongtinxe(maxe, tenxe);
     return pb;
 }

 public void getRowInfo() {
     table.addMouseListener(new MouseAdapter() {
     public void mouseClicked(MouseEvent e) {
     int row = table.getSelectedRow();
     txtmaxe.setText((String) table.getValueAt(row, 0));
     txttenxe.setText((String) table.getValueAt(row, 1));
     }
 });
 }

 public boolean checkKey(ResultSet rs, int key) {

     try {
         while (rs.next()) {
             if (key == rs.getInt(1)) {
                 return false;
             }
         }
     } catch (SQLException e) {
 //
 }
     return true;
 }

 private void delete() {

     String sqlCommand = "delete from thongtinxe where maxe = ?";

     //Check Nhan vien
     int i = 0;

     ResultSet rs = sql.getData("select * from thongtinxe where maxe = " + txtmaxe.getText());

     int row = table.getSelectedRow();
     if (row < 0) {
         JOptionPane.showMessageDialog(null, "Chọn xe để xóa", "Lỗi xóa", JOptionPane.ERROR_MESSAGE);
         return;
 }
     int select = JOptionPane.showOptionDialog(null, "Bạn chắc chắn muốn xóa ?", "Delete", 0, JOptionPane.YES_NO_OPTION, null, null, 1);
     if (select == 0) {
         boolean x = sql.delete(Integer.parseInt((String) table.getValueAt(row, 0)));
     if (x == true) {
         lbNof.setText("Xóa xe thành công");
     } else {
         lbNof.setText("Xóa xe thất bại");
     }
 }
     loadData();
 }

 private void insert() {
     thongtinxe xe = getThongtinxe();
     int row = table.getSelectedRow();
     if (txttenxe.getText() == null && txtmaxe.getText() == null) {
         JOptionPane.showMessageDialog(null, "Nhập thông tin xe", "Lỗi nhập thông tin", JOptionPane.ERROR_MESSAGE);
         return;
     } else if (xe == null) {
         JOptionPane.showMessageDialog(null, "Mã xe phải là một số", "Lỗi nhập thông tin", JOptionPane.ERROR_MESSAGE);
         return;
 } else if (checkKey(sql.getData("select * from thongtinxe"), Integer.parseInt(txtmaxe.getText())) == false) {
         JOptionPane.showMessageDialog(null, "Mã xe đã tồn tại", "Lỗi nhập thông tin", JOptionPane.ERROR_MESSAGE);
         return;
 } else {
         boolean x = sql.insert("thongtinxe", xe);
 if (x == true) {
         lbNof.setText("Thêm thông tin xe thành công");
 } else {
         lbNof.setText("Thêm thông tin xe thất bại");
 }
 }
     loadData();
 }

 private void update() {

     String sqlCommand = "update thongtinxe set tenxe = ? where maxe = ?";

     thongtinxe xe = getThongtinxe();
     int row = table.getSelectedRow();
     if (row < 0) {
         JOptionPane.showMessageDialog(null, "Chọn xe cần cập nhật", "Lỗi cập nhật", JOptionPane.ERROR_MESSAGE);
         return;
     }
     int select = JOptionPane.showOptionDialog(null, "Bạn chắc chắn muốn cập nhật ?", "Cập nhật", 0, JOptionPane.YES_NO_OPTION, null, null, 1);
     if (xe == null) {
         JOptionPane.showMessageDialog(null, "Mã xe phải là một số", "Lỗi nhập thông tin", JOptionPane.ERROR_MESSAGE);
         return;
     }
     if (select == 0) {
         boolean x = sql.update(xe, Integer.parseInt((String) table.getValueAt(row, 0)));
     if (x == true) {
         lbNof.setText("Cập nhật thông tin xe thành công");
     } else {
         lbNof.setText("Cập nhật thông tin xe thất bại");
     }
 }
     loadData();
 }

 @Override
 public void actionPerformed(ActionEvent e) {
     if (e.getActionCommand() == "Delete") {
         delete();
         return;
     }
     if (e.getActionCommand() == "Insert") {
         insert();
         return;
     }
     if (e.getActionCommand() == "Update") {
         update();
         return;
     }
 }

 public static void main(String[] args) {
     giaodien gui = new giaodien("kynangcntt.info | Java JDBC");
 }

}

Phân tích Code :

Hàm getRowInfo,

getRowInfo được tạo ra để lấy giá trị từ 1 hàng được chọn trong JTable sau đó gán các giá trị tương ứng vào các JTextField. Hổ trợ cho việc truy vấn.

Hàm loadData,

Hàm loadData có nhiệm vụ truy vấn chọn giá trị từ bảng. Từ đó, lấy các thông tin cơ bản của bảng Cơ sở dữ liệu hiển thị ra JTable.

Đầu tiên thực hiện truy vấn ” select * from thongtinxe “, kết quả có được từ câu lệnh truy vấn sẽ được lưu vào đối tượng rs của ResultSet.

Sau đó, sử dụng ResultSetMetaData lấy các thông tin cần thiết tạo bảng bao gồm : số hàng, số cột, tên cột từ Cơ sở dữ liệu được lưu trên đối tượng rs của ResultSet.

Tiếp theo, khởi tạo vòng lập while(rs.next) gồm 1 vòng lập for() chạy và lấy các giá trị của từng hàng và thêm vào mãng array.

Đối tượng model của DefaultTableModel sẽ thêm các giá trị từ mãng array ( model.add(array) ) để hiển thị lên JTable ( table.setModel(model) ).

Hàm checkKey

Hàm checkKey được sử dụng để kiểm tra ràng buộc khóa chính, khi người dùng Insert giá trị vào Database.

Các Hàm  Delete, Update, Insert :

Truy vấn câu lệnh thông qua ResultSet -> Lưu kết quả có được từ câu lệnh truy vấn vào ResulSet -> Kiểm tra các ràng buộc Cơ sở dữ liệu -> Gọi hàm truy vấn từ Class mysql, để truy vấn Cơ sở dữ liệu và hiển thị ra JTable.