0

I created a table with scene builder, defined all my columns there, so i am now trying to populate the columns from my database, all i get is the first row in my database, being duplicated for all other values when displayed on the tableView .Please i need help,i cant seem to find what i'm missing.

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();
    }
}
3
  • Try creating a new object in the loop where you add data to your TableView. Not just changing the value of an object declared before. Commented Jul 26, 2013 at 12:44
  • Wow, thank you very very much, all i had to do was add routes = FXCollections.ObsevableArrayList() before the for loop. THNAK YOU SOOO MUCH @Marc while (resultSet.next()) { routes = FXCollections.observableArrayList(); for (int i = 1; i <= resultSet.getMetaData().getColumnCount(); i++) { routes.add(resultSet.getString(i)); } data.add(routes); } allRouteTable.setItems(data); Commented Jul 26, 2013 at 13:58
  • maybe answer your own question with the working code so that it can be used by others. Commented Jul 29, 2013 at 14:15

2 Answers 2

1

Try this one.may be this will be helpfull.

 @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
Sign up to request clarification or add additional context in comments.

Comments

0

The new code

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();
        }
    }

}

1 Comment

Where are you declaring data?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.