2013-07-26 40 views
0

我创建了一个场景生成器的表,它定义了我所有的列,所以我现在试图从我的数据库填充列,我得到的是我的数据库中的第一行,为所有其他值显示在tableView上。请帮助我,我似乎无法找到我失踪的东西。Javafx TableView从数据库复制

public void populateTable() { 

    final String username = "root"; 
    final String password = "joshua"; 
    final String bd_url = "jdbc:mysql://localhost:3306/Bus_billing_system?zeroDateTimeBehavior=convertToNull"; 
    try { 
     connection = DriverManager.getConnection(bd_url, username, password); 
     getAllStatement = connection.createStatement(); 

     resultSet = getAllStatement.executeQuery("select * from RouteDB"); 

     //from column in table   
     fromColumn.setCellValueFactory(new Callback<CellDataFeatures<ObservableList, String>, ObservableValue<String>>() { 
      public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) { 
       return new SimpleStringProperty(param.getValue().get(0).toString()); 
      } 
     }); 

     //to column in table 
     toColumn.setCellValueFactory(new Callback<CellDataFeatures<ObservableList, String>, ObservableValue<String>>() { 
      public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) { 
       return new SimpleStringProperty(param.getValue().get(1).toString()); 
      } 
     }); 
     //date of departure column in table 
     dateOfDepartureColumn.setCellValueFactory(new Callback<CellDataFeatures<ObservableList, String>, ObservableValue<String>>() { 
      public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) { 
       return new SimpleStringProperty(param.getValue().get(2).toString()); 
      } 
     }); 
     //time of departure column in table 
     timeOfDepartureColumn.setCellValueFactory(new Callback<CellDataFeatures<ObservableList, String>, ObservableValue<String>>() { 
      public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) { 
       return new SimpleStringProperty(param.getValue().get(3).toString()); 
      } 
     }); 
     //price column 
     priceColumn.setCellValueFactory(new Callback<CellDataFeatures<ObservableList, String>, ObservableValue<String>>() { 
      public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) { 
       return new SimpleStringProperty(param.getValue().get(4).toString()); 
      } 
     }); 

     allRouteTable.getColumns().setAll(fromColumn, toColumn, dateOfDepartureColumn, timeOfDepartureColumn, priceColumn); 

     while (resultSet.next()) { 
      for (int i = 1; i <= resultSet.getMetaData().getColumnCount(); i++) { 
       routes.add(resultSet.getString(i)); 
      } 
      data.add(routes); 
     } 
     allRouteTable.setItems(data); 


    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 
+0

尝试在将数据添加到TableView的循环中创建一个新对象。不只是改变之前声明的对象的值。 – Marc

+0

哇,非常感谢你,我所要做的只是在for循环之前添加routes = FXCollections.ObsevableArrayList()。 THNAK YOU SOOO MUCH @Marc'while while(resultSet.next()){ routes = FXCollections.observableArrayList();对于(int i = 1; i <= resultSet.getMetaData()。getColumnCount(); i ++){ routes.add(resultSet.getString(i)); } data.add(routes); } allRouteTable.setItems(data);' –

+0

也许用工作代码回答您自己的问题,以便其他人可以使用它。 – Marc

回答

0

新的代码

public void populateTable() { 

    final String username = "root"; 
    final String password = "joshua"; 
    final String bd_url = "jdbc:mysql://localhost:3306/Bus_billing_system?zeroDateTimeBehavior=convertToNull"; 
    try { 
     connection = DriverManager.getConnection(bd_url, username, password); 
     getAllStatement = connection.createStatement(); 

     resultSet = getAllStatement.executeQuery("select * from RouteDB"); 

     //from column in table   
     fromColumn.setCellValueFactory(new Callback<CellDataFeatures<ObservableList, String>, ObservableValue<String>>() { 
      @Override 
      public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) { 
       return new SimpleStringProperty(param.getValue().get(0).toString()); 
      } 
     }); 

     //to column in table 
     toColumn.setCellValueFactory(new Callback<CellDataFeatures<ObservableList, String>, ObservableValue<String>>() { 
      @Override 
      public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) { 
       return new SimpleStringProperty(param.getValue().get(1).toString()); 
      } 
     }); 
     //date of departure column in table 
     dateOfDepartureColumn.setCellValueFactory(new Callback<CellDataFeatures<ObservableList, String>, ObservableValue<String>>() { 
      @Override 
      public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) { 
       return new SimpleStringProperty(param.getValue().get(2).toString()); 
      } 
     }); 
     //time of departure column in table 
     timeOfDepartureColumn.setCellValueFactory(new Callback<CellDataFeatures<ObservableList, String>, ObservableValue<String>>() { 
      @Override 
      public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) { 
       return new SimpleStringProperty(param.getValue().get(3).toString()); 
      } 
     }); 
     //price column 
     priceColumn.setCellValueFactory(new Callback<CellDataFeatures<ObservableList, String>, ObservableValue<String>>() { 
      @Override 
      public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) { 
       return new SimpleStringProperty(param.getValue().get(4).toString()); 
      } 
     }); 
     //availableSpace column 
     availableSpaceColumn.setCellValueFactory(new Callback<CellDataFeatures<ObservableList, String>, ObservableValue<String>>() { 
      @Override 
      public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) { 
       return new SimpleStringProperty(param.getValue().get(5).toString()); 
      } 
     }); 

     allRouteTable.getColumns().setAll(fromColumn, toColumn, dateOfDepartureColumn, timeOfDepartureColumn, priceColumn, availableSpaceColumn); 

     while (resultSet.next()) { 


      //This is the correction made defining the routes object after while loop 
      routes = FXCollections.observableArrayList(); 


      for (int i = 1; i <= resultSet.getMetaData().getColumnCount(); i++) { 
       routes.add(resultSet.getString(i)); 
      } 
      data.add(routes); 
     } 

     allRouteTable.setItems(data); 


    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
    finally { 
     try { 
      connection.close(); 
      getAllStatement.close(); 
      resultSet.close(); 
     } catch (SQLException er) { 
      er.printStackTrace(); 
     } 
    } 

} 
+0

你在哪里声明'data'? – ajeh

1

试试这个one.may是,这将是有益的。

@FXML private void SearchButton() 
     {  
      Connection c ; 
      datamem = FXCollections.observableArrayList(); 
      try 
      { 
       c = Dao.getCon(); 
       String SQL =SELECT * FROM `Member`; 

       ResultSet rs = c.createStatement().executeQuery(SQL); 
       if(table.getColumns().isEmpty()) 
       { 
       for(int i=0 ; i<rs.getMetaData().getColumnCount(); i++) 
       { 
        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());      
         }     
        }); 

        table.getColumns().addAll(col); 
       }//for 
       }//if 
      while(rs.next()) 
       { 
        ObservableList<String> row = FXCollections.observableArrayList(); 
        for(int i=1 ; i<=rs.getMetaData().getColumnCount(); i++) 
        { 
         row.add(rs.getString(i)); 
        }// for 
        datamem.add(row); 
       }//while 
       table.setItems(datamem); 
      }//try 
      catch(Exception e) 
      { 
       JOptionPane.showMessageDialog(null, "Problem in Search Button "+e); 
      } 
     }//else 
    }//else 

} //search method