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

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

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

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

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

  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());中的指定行.那是什么问题.

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

所以解决方案是颠倒那些行的顺序,我更喜欢在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();
        }
      }
    });

转载注明原文:Java:删除选定的行ResultSet,从数据库中删除最后一行? - 代码日志