试图从数据库中删除行时发生JavaFX错误
当我尝试删除一行时,会出现以下错误:java.sql.SQLException:在结果集开始之前。无法调用deleteRow() 我要做的是添加一个delete按钮,它从TableView中删除所选行。它可以从表中删除它。然而,它并没有删除数据库中的行,我一直在努力用不同的方法来解决如何做到这一点 删除按钮:试图从数据库中删除行时发生JavaFX错误,java,mysql,button,javafx,Java,Mysql,Button,Javafx,当我尝试删除一行时,会出现以下错误:java.sql.SQLException:在结果集开始之前。无法调用deleteRow() 我要做的是添加一个delete按钮,它从TableView中删除所选行。它可以从表中删除它。然而,它并没有删除数据库中的行,我一直在努力用不同的方法来解决如何做到这一点 删除按钮: Button removeButton1 = new Button("Remove"); removeButton1.setMaxWidth(150); removeBu
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();
}
});
删除项方法(错误):
问题(我想)是deleteRow()的问题,因为我没有表示要删除的行。。。然而,我对如何解决这个问题感到困惑。。。例如,使用TextField,我可以获得string/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);
}
你能行
removeButton1.setOnAction(e -> {
try {
Item selectedItem = itemTable.getSelectionModel().getSelectedItem();
itemTable.getItems().remove(selectedItem);
inventoryData.removeItem(selectedItem.getItemId());
} catch (SQLException e1) {
e1.printStackTrace();
}
}
与
(我假设JavaFX表的模型类是
项
,也就是说,您有一个表视图
:根据需要更改第一个块中selectedItem
的类型。)您必须使用next()遍历结果集就我记忆所及,我尝试过这个,虽然没有给出错误,但数据库没有任何更改。除非我也做错了…?SELECT
SQL语句从数据库表中选择实体。要从表中删除,请使用delete
语句。你看,也许是“詹姆士”之类的?“从项目_id=?”的项目中删除。。。项目id是主键。。。但是我如何从用户选择行中获取该项的id呢?假设您将id设置为表示行中数据的类的属性,因此您可以从所选项中获取它。这个论坛上没有人能透视:我们不知道你是如何建立模型课的。这就解决了问题。干杯还有一个问题:你能推荐一些关于这方面的教程/链接吗?有很多:我只是在谷歌上搜索“SQL简介”。对于初学者来说,这是一个合理的起点。
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();
}
}
}