【问题标题】:Delete Button function to delete selected row from javafx tableView and SQLite table row删除按钮功能从 javafx tableView 和 SQLite 表行中删除选定的行
【发布时间】:2016-09-08 08:25:00
【问题描述】:

我是第一次从事 Javafx 项目的新手,真的可以使用一些帮助和指导。我已经阅读并尝试了几种变体以获得正确的语法、方法和建议。一些我曾经让按钮功能正常工作,但只有一个。 我使用的是 Netbeans 8.1,我安装了 Java 1.8.0_102,sqlite-jdbc-3.8.11.2 用于连接。

我有一个 TableView,其中包含用于输入的文本字段(txtUsername、txtPassword、txtWebsite、txtComments)和四个按钮 Logout、Save、Clear 和 Delete。注销,保存和清除按钮功能完美,我的问题是删除功能。选择一行并按下“删除”按钮时,它将从表观视图删除所选的行,但不是从数据库表中删除,这就是我被卡住的地方。任何帮助将不胜感激和欢迎。

项目文件列表: application.css、background.jpeg、login.fxml、loginController.java、LoginModel.java、Main.java、SqliteConnectioo.java、user.fxml、UserController.java UserController.java 文件中的 deleteData 函数:

public void deleteData(ActionEvent event) {        
    int selectedIndex = tableView.getSelectionModel().getSelectedIndex();
    if (selectedIndex >= 0) {
        tableView.getItems().remove(selectedIndex);

    } else {
        // Row Not selected.
        Alert alert = new Alert(AlertType.WARNING);
        alert.setTitle("No Selection");
        alert.setHeaderText("No Username Selected");
        alert.setContentText("Please select a Username in the table.");
        alert.showAndWait();            

    }

}

如果您需要查看完整文件或任何其他文件,请告诉我,我会发布它们,提前感谢您提供的任何帮助。

【问题讨论】:

  • 您的代码在哪里负责从数据库中删除数据?
  • 那我需要帮助
  • 到目前为止,您尝试了什么?在我看来并不过分,试着带着具体的问题回来。

标签: java javafx sqlite


【解决方案1】:

您需要有一个 DAO 类,我想您可能已经有一个,因为您的问题暗示了具有“保存/添加到 DB”功能。如果您没有此功能,请先尝试,您可能会学到一些东西,然后按照这个问题进行操作。如果有,请在下方查看删除功能。

并且请不要要求了解添加功能,因为那样只会巩固您要求完成任务的事实。假设您尝试了 PreparedStatement 而不是 Statement,我正在回答这个问题。

您必须将以下方法和变量添加到 DAO 类,并使用 UserController 类中的标识符调用此方法。

private final String deleteQuery = "DELETE FROM <TABLE_NAME> WHERE <UNIQUE_COLUMN> = '"; //If you require multiple columns to get a unique row, add them in the where clause.

public void deleteRow(String uniqueIdentifier) {
      Statement stmt = con.createStatement(); //con is the connection object, it should be at SqliteConnectioo class
      stmt.executeUpdate(deleteQuery + uniqueIdentifier + "'");
      con.commit(); //If autocommit is off
}

此外,您的 TableView 的模板/数据类型类可以使用以下方法检索,

table.getSelectionModel().getSelectedItem()

由此,您将能够获得唯一标识符。您对此 DAO 删除方法的调用如下。

...
if (selectedIndex >= 0) {
        TableViewDataType tvDt = tableView.getSelectionModel().getSelectedItem() //TableViewDataType is the class which you have used to create the TableView, you can find this at the TableView's declaration.
        dao.deleteRow(tvDt.getTxtUsername());//assuming TxtUsername is the unique identifier
        tableView.getItems().remove(selectedIndex);
    } else {
...

如果这不是您要求的,请通过添加更多代码来澄清。

【讨论】:

  • 谢谢 iMan,DAO 类正是我所要求的,只是寻找缺失内容的另一个方向。看起来语法可以工作,我会读一些 DataAccessObject 以便我更好地理解这个方法,谢谢你的指针和例子。
  • @misonet 如果这个答案有帮助,那么请考虑接受它和/或支持它。否则它将继续显示为未解决。
猜你喜欢
  • 1970-01-01
  • 2017-04-15
  • 2019-04-19
  • 2014-04-29
  • 2019-02-26
  • 2013-08-15
  • 2016-10-02
  • 1970-01-01
  • 2023-01-05
相关资源
最近更新 更多