Обновление данных в TableView
У меня есть метод для заполнения таблицы TableView данными из БД, подскажите пожалуйста что мне нужно сделать что бы эти данные автоматически обновлялись
Вот метод для заполнения таблицы
public void buildData(){
Connection table;
ResultSet rs = null;
table = DatabaseHandler.getDbConnection();
data = FXCollections.observableArrayList();
String PostSQL = "SELECT * from " + Constant.TABLE_OF_ORGANIZATION;
try{
rs = table.createStatement().executeQuery(PostSQL);
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<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+"] ");
}
while(rs.next()){
//Iterate Row
ObservableList<String> row = FXCollections.observableArrayList();
for(int i=1 ; i<=rs.getMetaData().getColumnCount(); i++){
//Iterate Column
row.add(rs.getString(i));
}
System.out.println("Row [1] added "+row );
data.add(row);
}
tableView.setItems(data);
}catch(Exception e){
e.printStackTrace();
System.out.println("Error on Building Data");
}
}
Ответы (1 шт):
Автор решения: lampa
→ Ссылка
Самый простой вариант - каждые n времени удалять все поля и заново их добавлять.
new Timer().schedule(new TimerTask() {
@Override
public void run() {
tableView.getItems().clear();
while(rs.next()){
//Iterate Row
ObservableList<String> row = FXCollections.observableArrayList();
for(int i=1 ; i<=rs.getMetaData().getColumnCount(); i++){
//Iterate Column
row.add(rs.getString(i));
}
System.out.println("Row [1] added "+row );
data.add(row);
}
tableView.setItems(data);
}, 0, TimeUnit.SECONDS.toMillis(1));
}
Сложнее - каждые n времени делать запрос в БД, получать ответ, сверять ответ с полями и если нужно - обновлять их.
Еще сложнее - реализовать шаблон producer/consumer, где producer будет создавать события обновления организации в БД, а consumer будет это событие ловить и изменять поле.
