Я создал таблицу со сценарием, определил все мои столбцы там, поэтому теперь я пытаюсь заполнить столбцы из моей базы данных, все, что я получаю, это первая строка в моей базе данных, дублирующаяся для всех другие значения, отображаемые в таблицеView. Пожалуйста, мне нужна помощь, я не могу найти то, что мне не хватает.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();
}
}
Попробуйте создать новый объект в цикле, где вы добавите данные в TableView. Не только изменение значения объявленного ранее объекта. – Marc
Вау, большое спасибо, все, что мне нужно было сделать, это добавить маршруты = FXCollections.ObsevableArrayList() перед циклом for. 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 (маршруты); } allRouteTable.setItems (data); ' –
, возможно, ответьте на свой вопрос с помощью рабочего кода, чтобы его могли использовать другие. – Marc