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

时间:2012-08-24 07:22:52

标签: 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();
    }
  }
});

2 个答案:

答案 0 :(得分:2)

谢谢@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();
        }
      }
    });

答案 1 :(得分:2)

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();
        }

显示结果集中的错误??