当我选择一行并按“删除”按钮时:
在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();
}
}
});
答案 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();
}
显示结果集中的错误??