当我选择一行并按“删除”按钮时:
在 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/