Xóa dữ liệu từ bảng nhưng chỉ xóa được ở bảng, không xóa được bên SQL

Java Swing connect SQL - Mình muốn xóa dữ liệu từ bảng nhưng chỉ xóa được ở bảng, không xóa được bên SQL ạ?
Mình có một đoạn code ở class connect

public boolean deleteSach(Sach s){
        
        String sql = "DELETE FROM Sach WHERE MaSach = ? ";
        try {
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, s.getMaSach());
            return ps.executeUpdate() > 0;

        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return false;
    }

Và một đoạn code bên jframe

Sach s = new Sach();
        int row = tbSach1.getSelectedRow();
        if(new Connect().deleteSach(s)){
            if(row>0){
            list.remove(row);
            showData();
            JOptionPane.showMessageDialog(rootPane, "Delete Success!");
        }
        } else{
            JOptionPane.showMessageDialog(rootPane, "?");
        }
    public void showData(){
        model.setRowCount(0);
        for (Sach s : list) {
            model.addRow(new Object[]{
         s.getMaSach(), s.getTenSach(), s.getTacGia(), s.getTheLoai(), s.getNXB(), s.getGiaTien(), s.getNgayNhapKho()
            });
        }
}

Mình có thử chỉnh sửa nhưng có vẻ như không connect được với dữ liệu bên sql, lúc xóa được dữ liệu bên table lại không xóa được bên kia, mọi người có thể kiểm tra giúp mình không ạ?

Chà, bạn…
Mình chả biết nói sao. Cho mình hỏi: khi bạn gọi Sach s = new Sach() thì cái mã số sách của s đang bằng bao nhiêu? Bằng cái gì trong bảng của bạn?

2 Likes

Mình vừa mới thử sửa lại đây ạ

    public boolean deleteSach(String MaSach){
        
        String sql = "DELETE FROM Sach WHERE MaSach = ? ";
        try {
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, MaSach);
            return ps.executeUpdate() > 0;

        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
        Connect delete = new Connect();
        int row = tbSach1.getSelectedRow();
            if(delete.deleteSach(tfMaSach.getText())){
            list.remove(row);
            JOptionPane.showMessageDialog(rootPane, "Delete Success!");
        }
         else{
            JOptionPane.showMessageDialog(rootPane, "?");
        }

nhưng vẫn không khả thi lắm…

Thay cứng 1 mã sách vào chỗ dấu hỏi và không dùng câu lệnh prepareStatement mà xử luôn xem nó có chạy không đã.

2 Likes

Có cái gì đó cấn cấn ở đây. Delete sách trong table ở selectedRow nhưng lại delete sách trong db bằng ô input. Bạn có hiểu mình đang viết gì không vậy

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?