我创建了一个场景生成器的表,它定义了我所有的列,所以我现在试图从我的数据库填充列,我得到的是我的数据库中的第一行,为所有其他值显示在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();
}
}
尝试在将数据添加到TableView的循环中创建一个新对象。不只是改变之前声明的对象的值。 – Marc
哇,非常感谢你,我所要做的只是在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);' –
也许用工作代码回答您自己的问题,以便其他人可以使用它。 – Marc