尝试从数据库中删除行时出现JavaFX错误

时间:2017-06-19 12:21:05

标签: java mysql button javafx

当我尝试删除行时出现以下错误: 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);
}

1 个答案:

答案 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>