Java:删除选定的行ResultSet,从数据库中删除最后一行?

当我选择一行并按“删除”按钮时:

在swing界面中,删除所选行(如预期的那样)。 但

在实际数据库中,无论选择的行是什么(不是预期的),都会删除最后一行。 删除的行始终是数据库中的最后一行,无论实际选择的行是什么。 我的代码中没有错误也没有抛出exception。 它没有任何中断。

我实际上在我的代码中添加了必要的东西:

Statement sqlStatement = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); 

并添加“删除”按钮以删除所选行:

 JButton removeEmployee = new JButton("Remove Selected"); removeEmployee.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { dTableModel.removeRow(table.getSelectedRow()); try { resultSet.absolute(table.getSelectedRow()); resultSet.deleteRow(); } catch (SQLException e1) { e1.printStackTrace(); } } }); 

谢谢@Germann ……

我解决了它,我将提供解决方案,以便其他人可以从中获得帮助。

你是对的resultSet.absolute(...); 返回布尔值,但它也将光标移动到其参数resultSet.absolute(table.getSelectedRow());的指定行resultSet.absolute(table.getSelectedRow()); 。 那是什么问题。

问题是:行dTableModel.removeRow(table.getSelectedRow()); 不得在resultSet.absolute(table.getSelectedRow());之前调用resultSet.absolute(table.getSelectedRow()); 因为(第一个)它删除了所选行,并且因为它被删除,所以第二个方法没有选中任何内容,因此table.getSelectedRow()返回-1。 并且如文档中所指定, absolute(-1)将光标移动到最后一行,并删除基础数据库中的最后一行。

所以解决方案是颠倒那些行的顺序,我更喜欢在resultSet.deleteRow();之后创建它resultSet.deleteRow();

  JButton removeEmployee = new JButton("Remove Selected"); removeEmployee.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try {/* here I added +1 because it moves the row to the selected row -1 I don't know why. But it now works well */ resultSet.absolute(table.getSelectedRow()+1); resultSet.deleteRow(); dTableModel.removeRow(table.getSelectedRow()); } catch (SQLException e1) { e1.printStackTrace(); } } }); 
 removePres.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ // Will remove which ever row that is selected try { // Moves the database to the row currently selected // getSelectedRow returns the row number for the selected resultSet.absolute(table.getSelectedRow()+1); resultSet.deleteRow(); dTableModel.removeRow(table.getSelectedRow()); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } 

显示结果集中的错误??