【问题标题】:How to delete a row in JTable and in mysql如何在 JTable 和 mysql 中删除一行
【发布时间】:2016-02-21 03:40:18
【问题描述】:

Java 代码

int dialogDelete=JOptionPane.showConfirmDialog(null,"Are you sure you want to delete this Personnel?", "DELETE PERSONNEL",JOptionPane.YES_NO_OPTION);
            if(dialogDelete==JOptionPane.YES_OPTION){      
                DefaultTableModel model = (DefaultTableModel)tbl_personnel.getModel();
                int row = tbl_personnel.getSelectedRow();



                String url = "jdbc:mysql://localhost/mypos";
                String username = "root";
                String password = "";

            try {
                Connection connection = DriverManager.getConnection(url,username,password);
                System.out.println("database connected");
                stmt = connection.createStatement();

                stmt.execute("DELETE FROM Personnel WHERE Id ="+row+"");         
            } catch(Exception e) {
                throw new IllegalStateException("cannot",e);
            }      

                int modelRow = tbl_personnel.convertRowIndexToModel( row );
                model.removeRow( modelRow );


            }

我已经编辑了代码。我现在可以删除 JTable 中的行并删除 mysql 中的行,但是 JTable 中删除的行不是 mysql 中删除的行。我不确定出了什么问题。

【问题讨论】:

  • 这将取决于 TableModel

标签: java swing jtable


【解决方案1】:

我想知道当我单击 JTable 上的一行然后按删除按钮时如何从 JTable 中删除一行。

您不需要 MouseListener。默认情况下将选择该行。

您也不会在按钮上使用 MouseListener。相反,您需要将 ActionListner 添加到“删除行”按钮。

您可能正在使用 DefaultTableModel,因此您可以使用模型的 removeRow(...) 方法从表中删除行。

ActionListener 中的基本代码类似于:

DefaultTableModel model = (DefaultTableModel)table.getModel();
int row = table.getSelectedRow();
int modelRow = table.convertRowIndexToModel( row );
model.removeRow( modelRow );

所以基本上你使用当前显示 JOptionPane 的代码,如果响应为“是”,则添加上面的代码。

编辑:

stmt.execute("DELETE FROM Personnel WHERE Id ="+row+"");         

您不能使用“选择的行来控制要删除的记录。选择的行表示JTable中的行位置,而不是数据库表中定义的行的ID。

您必须在 TableModel 中有一个表示行 ID 的列。所以代码会是这样的:

String id = table.getValueAt(row, column);
stmt.execute("DELETE FROM Personnel WHERE Id =" + id + "");       

另外,最好使用 PreparedStatement。你不太喜欢犯 SQL 语法错误:

String sql = "DELETE FROM Personnel WHERE Id = ?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString( 1, id );
stmt.executeUpdate();
stmt.close();

【讨论】:

  • 谢谢。我已经编辑了我的代码。当我删除它时,我无法将它连接到 mysql。它只是在表中删除,我的数据库不受影响。
猜你喜欢
  • 2014-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
  • 2017-09-28
  • 2013-03-07
  • 1970-01-01
相关资源
最近更新 更多