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(); }
显示结果集中的错误??