2

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

在摆动界面中,选定的行被删除(如预期的那样)。但

在实际数据库中,无论所选行是什么(不是预期的),最后一行都会被删除。无论实际选择的行是什么,删除的行始终是数据库中的最后一行。我的代码中没有错误,也没有抛出异常。它可以不间断地工作。

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

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

2 回答 2

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

结果集中显示错误??

于 2013-03-21T06:01:29.443 回答
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();
        }
      }
    });
于 2012-08-24T17:56:16.030 回答