当我尝试删除行时出现以下错误: java.sql.SQLException:在开始结果集之前。无法调用deleteRow()
我想要做的是添加一个删除按钮,该按钮从TableView中删除所选行。它可以从表中删除它。然而,它并没有删除数据库中的那一行,而且我试图解决如何解决这个问题的方法有点挣扎...
删除按钮:
Button removeButton1 = new Button("Remove");
removeButton1.setMaxWidth(150);
removeButton1.setOnAction(e -> {
try {
int selectedIndex = itemTable.getSelectionModel().getSelectedIndex();
itemTable.setEditable(true);
itemTable.getItems().remove(selectedIndex);
inventoryData.removeItem();
} catch (SQLException e1) {
e1.printStackTrace();
}
});
删除项目方法(错误):
public void removeItem() throws SQLException {
Statement stmt = null;
try {
stmt = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet uprs = stmt.executeQuery("SELECT * FROM Items");
uprs.deleteRow();
uprs.first();
} catch (Exception e){
e.printStackTrace();
} finally {
if(stmt != null){
stmt.close();
}
}
}
问题(我认为)是使用deleteRow(),因为我没有表达它要删除的行...但我很遗憾如何解决这个问题...例如,使用TextField,我可以获取字符串/ int值,它会在我的数据库中找到它...但是当用户只是单击一行时我该怎么做?我试图查看有关stackoverflow的先前问题,但是我的困惑只是激动人心......
提前致谢。
修改
private final IntegerProperty itemId = new SimpleIntegerProperty(this,"itemId");
public IntegerProperty itemIdProperty(){
return itemId;
}
public final int getItemId(){
return itemIdProperty().get();
}
public final void setItemId(int itemId){
itemIdProperty().set(itemId);
}
答案 0 :(得分:1)
你可以做到
removeButton1.setOnAction(e -> {
try {
Item selectedItem = itemTable.getSelectionModel().getSelectedItem();
itemTable.getItems().remove(selectedItem);
inventoryData.removeItem(selectedItem.getItemId());
} catch (SQLException e1) {
e1.printStackTrace();
}
}
与
public void removeItem(int itemId) throws SQLException {
PreparedStatement stmt = null;
try {
stmt = connection.prepareStatement("DELETE FROM Items where item_id = ?");
stmt.setInt(1, itemId);
stmt.execute();
} catch (Exception e){
e.printStackTrace();
} finally {
if(stmt != null){
stmt.close();
}
}
}
(我假设您的JavaFX表的模型类是Item
,即您有TableView<Item>
:根据需要更改第一个块中selectedItem
的类型。)< / p>