当我选择一个行,按“删除”按钮:
在摆动接口所选择的行被移除(如预期)。 但
在实际的数据库中的最后一行被删除无论是(不预期)选定行。 删除的行始终在数据库中的最后一排,无论实际选择的行了。 有没有错误,没有例外在我的代码抛出。 它的工作原理没有任何中断。
其实,我添加了必要的事情,我的代码:
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(...);
返回布尔值,但它也将光标移动到指定的行中的其参数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();
}
}
});
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();
}
示出了在结果集误差Δθ
文章来源: Java: Delete a selected row ResultSet, Deletes last row from the database instead?