繁体   English   中英

Javafx使用TableView更新数据库

[英]Javafx update database with tableview

我创建了一个脚本,该脚本将创建并填充数据到tableview(我已经使用了场景构建器作为tableview)。 它的列是动态的,具体取决于mysql表的列数。 但是我找不到关于如何将数据编辑/插入到tableview以及自动更新MySQL表的任何解决方案。

这是我的代码,用于动态列并从数据库向其中填充数据。 顺便说一句,我正在使用的数据库表有50列。

data = FXCollections.observableArrayList();
    try {
        c = DBConnect.connect();
        //SQL FOR SELECTING ALL OF CUSTOMER
        String SQL = "SELECT * from CAM_ODS_TIMESHEET_RAW_MOD";
        //ResultSet
        ResultSet rs = c.createStatement().executeQuery(SQL);

        /**
         * ********************************
         * TABLE COLUMN ADDED DYNAMICALLY * 
         * ********************************
         */
        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<CellDataFeatures<ObservableList, String>, ObservableValue<String>>() {
                public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) {
                    return new SimpleStringProperty(param.getValue().get(j).toString());
                }
            });

            tableview.getColumns().addAll(col);

            System.out.println("Column [" + i + "] ");
        }

        /**
         * ******************************
         * Data added to ObservableList * 
         * ******************************
         */
        while (rs.next()) {
            //Iterate Row
            ObservableList<String> row = FXCollections.observableArrayList();
            for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
                //Iterate Column
                if (rs.getString(i) == null) {
                    row.add("");
                } else {
                    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");
    }

我也看到了多个使用Model的示例,例如Person类等,但是我想知道如何将其用于多个列(例如50列)

预先感谢您的帮助! :)

听起来像您的要求,就像做MYSQL表的FX GUI。 如果要执行此操作,则需要为obserbleList添加一个changlistener,并将SQL插入/更新/删除逻辑添加到其中。

ObservableList.addListener(ListChangeListener<? super E> listener)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM