Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从数据库中删除TableView中的行_Java_Mysql_Sql_Javafx - Fatal编程技术网

Java 从数据库中删除TableView中的行

Java 从数据库中删除TableView中的行,java,mysql,sql,javafx,Java,Mysql,Sql,Javafx,嘿,伙计们 这样我就可以将某人从我的TableView中删除。我使用此方法生成tableview: public void initialize(){ TableView tableview = getUserDeleteTable(); ObservableList<ObservableList> data; Connection c; data = FXCollections.observableArrayList(); try {

嘿,伙计们

这样我就可以将某人从我的TableView中删除。我使用此方法生成tableview:

public void initialize(){
    TableView tableview = getUserDeleteTable();
    ObservableList<ObservableList> data;
    Connection c;
    data = FXCollections.observableArrayList();
    try {
        c = Database.getConnection();
        String SQL = "SELECT * FROM User";
        ResultSet rs = c.createStatement().executeQuery(SQL);

        for (int i = 0; i < rs.getMetaData().getColumnCount(); i++) {
            //We are using non property style for making dynamic table
            final int j = i;
            TableColumn col = new TableColumn(rs.getMetaData().getColumnName(i + 1));
            col.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList, String>, ObservableValue<String>>() {
                public ObservableValue<String> call(TableColumn.CellDataFeatures<ObservableList, String> param) {
                    return new SimpleStringProperty(param.getValue().get(j).toString());
                }
            });

            tableview.getColumns().addAll(col);
            //    System.out.println("Column ["+i+"] ");
        }
        while (rs.next()) {
            //Iterate Row
            ObservableList<String> row = FXCollections.observableArrayList();
            for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
                //Iterate Column
                row.add(rs.getString(i));
            }
            //   System.out.println("Row [1] added "+row );
            data.add(row);

        }
        //FINALLY ADDED TO TableView
        tableview.setItems(data);
    } catch (Exception e) {
        e.printStackTrace();
        System.out.println("Error on Building Data");
    }

所以现在我很好奇,从数据库中删除一个的最佳解决方案是什么。tableview中填充了一个用户对象,该对象具有ID名称、密码和电子邮件地址。最好的方法是什么


正如james_D所说,我应该把用户对象放在列表中。我得到了一个用户类,其中包含了它需要的所有内容,但我如何正确地折射它?

“tableview中填充了一个用户对象…”。不是根据您发布的代码:在代码中,您用
ObservableList
s填充tableview。如果编写一个
User
类,并用实际的
User
对象填充表,那么管理起来会更好、更容易。然后,您可以很容易地从
用户
对象获取ID,并执行SQL删除其中一个。我将从重构开始。(还要去掉所有原始类型:即使用
TableView
而不是
TableView
,等等)。因此,如果我将列表输入更改为它,则会在TableView.setItems(数据)处出错,因为ejavafx.collections.ObservableList不能转换为javafx.collections.ObservableList。有没有办法解决这个问题?是的。使用
User
实例而不是列表填充表。换句话说,使
数据
成为
可观察列表
成为
用户
,等等,所以我更改了可观察列表数据;是否需要将CellValueFactorys更改为User,String?因为就像我在上面所做的更改一样,它在给出data.add(row)时遇到了问题。我真的不知道如何折射它你介意帮我吗?有很多教程展示了如何使用
TableView
显示域对象(例如,在你的示例中是
User
s)。是一个,;这是另一个。这样设置之后,您就可以执行
User selectedItem=tableview.getSelectionModel().getSelectedItem()
然后
intid=selectedItem.getId()
(假设您的
User
类有一个
getId()
方法)。然后在数据库中执行delete语句。
and this on to delete a User from the Tableview:
    delButton.setOnAction( event -> {
        Object selectedItem = tableview.getSelectionModel().getSelectedItem();
        tableview.getItems().remove(selectedItem);

    });