Доброго времени суток!
Есть tableView, с которого нужно получить все элементы и сделать UPDATE запрос в SQLite базу. Скажите, каким способом можно это сделать?
package sample;
public class mainFormController{
@FXML
TableView tableView;
@FXML
TableColumn idColumn;
@FXML
TableColumn surnameCol;
@FXML
TableColumn nameCol;
@FXML
TableColumn secondnameCol;
@FXML
TableColumn adressCol;
@FXML
TableColumn numberCol;
@FXML
TableColumn idstyleCol;
//club
@FXML
TableColumn idColumn2;
@FXML
TableColumn descripColumn;
@FXML
TableColumn dateColumn;
@FXML
TableColumn adressCol2;
@FXML
TableView tableView2;
@FXML
public void OnExitClick()
{
System.exit(0);
}
@FXML
public void LoadAction(ActionEvent event)
{
ObservableList<Clients> _list = FXCollections.observableArrayList();
ObservableList<Club> _list2 = FXCollections.observableArrayList();
_list = Helper.GetClients("SELECT * FROM clients");
_list2 = Helper.GetClub("SELECT * FROM club");
idColumn.setCellValueFactory(new PropertyValueFactory<Clients, Integer>("id"));
secondnameCol.setCellValueFactory(new PropertyValueFactory<Clients,String>("secondname"));
secondnameCol.setEditable(true);
secondnameCol.setCellFactory(TextFieldTableCell.forTableColumn());
secondnameCol.setOnEditCommit(
new EventHandler<CellEditEvent<Clients, String>>() {
@Override
public void handle(CellEditEvent<Clients, String> t) {
((Clients) t.getTableView().getItems().get(
t.getTablePosition().getRow())
).setSecondname(t.getNewValue());
}
}
);
surnameCol.setCellValueFactory(new PropertyValueFactory<Clients,String>("surname"));
surnameCol.setEditable(true);
surnameCol.setCellFactory(TextFieldTableCell.forTableColumn());
surnameCol.setOnEditCommit(
new EventHandler<CellEditEvent<Clients, String>>() {
@Override
public void handle(CellEditEvent<Clients, String> t) {
((Clients) t.getTableView().getItems().get(
t.getTablePosition().getRow())
).setSurname(t.getNewValue());
}
}
);
nameCol.setCellValueFactory(new PropertyValueFactory<Clients,String>("name"));
nameCol.setEditable(true);
nameCol.setCellFactory(TextFieldTableCell.forTableColumn());
nameCol.setOnEditCommit(
new EventHandler<CellEditEvent<Clients, String>>() {
@Override
public void handle(CellEditEvent<Clients, String> t) {
((Clients) t.getTableView().getItems().get(
t.getTablePosition().getRow())
).setName(t.getNewValue());
}
}
);
adressCol.setCellValueFactory(new PropertyValueFactory<Clients,String>("adress"));
adressCol.setEditable(true);
adressCol.setCellFactory(TextFieldTableCell.forTableColumn());
adressCol.setOnEditCommit(
new EventHandler<CellEditEvent<Clients, String>>() {
@Override
public void handle(CellEditEvent<Clients, String> t) {
((Clients) t.getTableView().getItems().get(
t.getTablePosition().getRow())
).setAdress(t.getNewValue());
}
}
);
numberCol.setCellValueFactory(new PropertyValueFactory<Clients,String>("phonenumber"));
numberCol.setEditable(true);
numberCol.setCellFactory(TextFieldTableCell.forTableColumn());
numberCol.setOnEditCommit(
new EventHandler<CellEditEvent<Clients, String>>() {
@Override
public void handle(CellEditEvent<Clients, String> t) {
((Clients) t.getTableView().getItems().get(
t.getTablePosition().getRow())
).setPhonenumber(t.getNewValue());
}
}
);
idstyleCol.setCellValueFactory(new PropertyValueFactory<Clients,Integer>("idofstyle"));
//второй колум
idColumn2.setCellValueFactory(new PropertyValueFactory<Club,Integer>("id"));
descripColumn.setCellValueFactory(new PropertyValueFactory<Club,String>("description"));
descripColumn.setEditable(true);
descripColumn.setCellFactory(TextFieldTableCell.forTableColumn());
descripColumn.setOnEditCommit(
new EventHandler<CellEditEvent<Club, String>>() {
@Override
public void handle(CellEditEvent<Club, String> t) {
((Club) t.getTableView().getItems().get(
t.getTablePosition().getRow())
).setDescription(t.getNewValue());
}
}
);
dateColumn.setCellValueFactory(new PropertyValueFactory<Club,String>("dateofbirth"));
dateColumn.setEditable(true);
dateColumn.setCellFactory(TextFieldTableCell.forTableColumn());
dateColumn.setOnEditCommit(
new EventHandler<CellEditEvent<Club, String>>() {
@Override
public void handle(CellEditEvent<Club, String> t) {
((Club) t.getTableView().getItems().get(
t.getTablePosition().getRow())
).setDateofbirth(t.getNewValue());
}
}
);
adressCol2.setCellValueFactory(new PropertyValueFactory<Club,String>("adress"));
adressCol2.setEditable(true);
adressCol2.setCellFactory(TextFieldTableCell.forTableColumn());
adressCol2.setOnEditCommit(
new EventHandler<CellEditEvent<Club, String>>() {
@Override
public void handle(CellEditEvent<Club, String> t) {
((Club) t.getTableView().getItems().get(
t.getTablePosition().getRow())
).setAdress(t.getNewValue());
}
}
);
tableView.setEditable(true);
tableView2.setEditable(true);
tableView.setItems(_list);
tableView2.setItems(_list2);
}
public void SaveItems()
{
}
}
Так как вопрос больно общий, то простейшая реализация:
public void saveItems() {
for ( Clients client : tableView.getItems() ) {
//здесь надо какую-нибудь проверку, изменилось ли что-нибудь,
//чтобы лишних запросов в базу не было
Helper.updateClient( "UPDATE clients " +
"SET secondname = " + client.secondname +
", surname = " + client.surname +
", name = " + client.name +
", adress = " + client.adress +
", phonenumber = " + client.phonenumber +
", idofstyle = " + client.idofstyle +
" WHERE id = " + client.id );
}
}
Это при условии что в Helperе есть какая-нибудь реализация метода updateClient и НЕ используется PreparedStatement, что было бы неплохо:
updateClientStmt = connection.prepareStatement( " UPDATE clients " +
"SET secondname = ?, surname = ?, name = ?, adress = ? " +
"phonenumber = ?, idofstyle = ?, WHERE id = ?" );
Тогда можно было бы передать все параметрами как аргументы метода, ну да ладно.
( Схему базы я естественно выдумал )
P.S. Кстати, все манипуляции с базой лучше бы производить в отдельном потоке. В FX есть неплохая библиотека `javafx.concurrent'.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости