Java:删除选定的行结果集,而是从数据库中删除最后一行?

标签 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(...);返回 boolean 值,但它也会将光标移动到其参数中的指定行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:删除选定的行结果集,而是从数据库中删除最后一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12104882/

相关文章:

sql - 计算 SHOW TABLE EXTENDED 返回的结果集中的行

mysql - 扫描一个mysql表,为什么逐行获取结果集比完全在内存中检索要快得多?

java - Jena:如何从 Java 中的 SPARQL (Jena) 结果集中获取整数结果?

java - 遍历 ResultSet 并将其值添加到 ArrayList

java - 如何编写以\t 作为分隔符的 csv 文件?直接的方法行不通

java - 刷新库存时出错。应用内结算

java - 致命异常 : java. lang.OutOfMemoryError 使用 okhttp3 okio 下载文件

java - 发现类型不匹配 : scala function => Unit required: java. util.Consumer

java - ResultSetMetaData.getColumnTypeName 返回 UNKNOWN

java - 具有 Manifest 声明的独特 PendingIntent