2017-03-21 18 views
0

我已經創建了一個腳本,將創建和填充數據到tableview(我已經使用場景生成器的tableview)。它的列是動態的,取決於mysql表的列數。但是我找不到任何有關如何編輯/插入數據到tableview並自動更新MySQL表的解決方案。Javafx更新數據庫與桌面視圖

這裏是我的代碼,用於動態列和填充數據庫中的數據。順便說一下,我使用的數據庫表有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"); 
    } 

我也看到了多個例子,使用類似型號Person類等,但我不知道我該如何使用,對於多列像50列

預先感謝您的幫助! :)

回答

0

聽起來像你的要求就像做MYSQL表的fx gui。 如果你想這樣做,你需要爲obserbleList添加一個changlistener,並在其中添加SQL插入/更新/刪除邏輯。

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