Записывание информацию через TableView в базу данных PostgreSql
У меня есть вот такой tableview
Который я заполняю из БД вот так вот
rs = table.createStatement().executeQuery(PostSQL);
while (rs.next()){
int first = rs.getInt("code");
String second = rs.getString("category");
String second1 = rs.getString("additional_score");
String third = rs.getString("name_score");
int fouth = rs.getInt("saldo_in_som");
int fifth = rs.getInt("debet");
int sixth = rs.getInt("kredit");
int seventh = rs.getInt("saldo_out_som");
int eight = rs.getInt("defference");
int nine = rs.getInt("saldo_in_usd");
int ten = rs.getInt("debit_usd");
int eleven = rs.getInt("credit_usd");
int twelve = rs.getInt("saldo_out_usd");
int thirteen = rs.getInt("difference_usd");
// MainTableInf считайте тотже самый класс что и ProgrammData просто я путаться начал и создал отдельный класс
ConsolidInfin ConsolidInfTable = new ConsolidInfin(first, second, second1, third, fouth, fifth, sixth, seventh, eight,
nine, ten, eleven, twelve, thirteen);
ConsolidInfTable.getCode();
ConsolidInfTable.getCategory();
ConsolidInfTable.getAdittional_score();
ConsolidInfTable.getName_of_score();
ConsolidInfTable.getSaldo_in_som();
ConsolidInfTable.getDebit();
ConsolidInfTable.getKredit();
ConsolidInfTable.getSaldo_out_som();
ConsolidInfTable.getDifference();
ConsolidInfTable.getSaldo_in_usd();
ConsolidInfTable.getDebit_usd();
ConsolidInfTable.getKredit_usd();
ConsolidInfTable.getSaldo_out_usd();
ConsolidInfTable.getDifference_usd();
data.add(ConsolidInfTable);
Code.setCellValueFactory( new PropertyValueFactory<ConsolidInfin, Integer>("code"));
Category.setCellValueFactory(new PropertyValueFactory<ConsolidInfin, String>("category"));
Category.setCellFactory(TextFieldTableCell.forTableColumn());
Additional_Score.setCellValueFactory( new PropertyValueFactory<ConsolidInfin, String>("adittional_score"));
Additional_Score.setCellFactory(TextFieldTableCell.forTableColumn());
Score.setCellValueFactory( new PropertyValueFactory<ConsolidInfin, String>("name_of_score"));
Score.setCellFactory(TextFieldTableCell.forTableColumn());
Score.setOnEditCommit(
new EventHandler<TableColumn.CellEditEvent<ConsolidInfin, String>>() {
@Override
public void handle(TableColumn.CellEditEvent<ConsolidInfin, String> consolidInfinStringCellEditEvent) {
DatabaseHandler db = new DatabaseHandler();
(consolidInfinStringCellEditEvent.getTableView().getItems().get
(consolidInfinStringCellEditEvent.getTablePosition().getRow()))
.setName_of_score(consolidInfinStringCellEditEvent.getNewValue());
String a = String.valueOf(consolidInfinStringCellEditEvent.getNewValue());
ConsolidInfin c = new ConsolidInfin(a);
db.consolidUpdateScore(c);
buildTable ();
}
}
);
SaldoInSom.setCellValueFactory( new PropertyValueFactory<ConsolidInfin, Integer>("saldo_in_som"));
DebitSom.setCellValueFactory( new PropertyValueFactory<ConsolidInfin, Integer>("debit"));
CreditSom.setCellValueFactory( new PropertyValueFactory<ConsolidInfin, Integer>("kredit"));
SaldoOutSom.setCellValueFactory( new PropertyValueFactory<ConsolidInfin, Integer>("saldo_out_som"));
Difference.setCellValueFactory( new PropertyValueFactory<ConsolidInfin, Integer>("difference"));
SaldoInUsd.setCellValueFactory( new PropertyValueFactory<ConsolidInfin, Integer>("saldo_in_usd"));
DebitUsd.setCellValueFactory( new PropertyValueFactory<ConsolidInfin, Integer>("debit_usd"));
CreditUsd.setCellValueFactory( new PropertyValueFactory<ConsolidInfin, Integer>("kredit_usd"));
SaldoOutUsd.setCellValueFactory( new PropertyValueFactory<ConsolidInfin, Integer>("saldo_out_usd"));
DifferenceUsd.setCellValueFactory( new PropertyValueFactory<ConsolidInfin, Integer>("difference_usd"));
}
ConsolidatedTable.setItems(data);
ConsolidatedTable.setEditable(true);
ConsolidatedTable.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
rs.close();
Есть метод который позволяет в ячейку что то записывать, так вот моя проблема в том, что я никак не могу присвоить записанное к определенной строке, то бишь он записывает информацию во весь столбик Через вот этот метод:
public void handle(TableColumn.CellEditEvent<ConsolidInfin, String> consolidInfinStringCellEditEvent) {
DatabaseHandler db = new DatabaseHandler();
(consolidInfinStringCellEditEvent.getTableView().getItems().get
(consolidInfinStringCellEditEvent.getTablePosition().getRow()))
.setName_of_score(consolidInfinStringCellEditEvent.getNewValue());
String a = String.valueOf(consolidInfinStringCellEditEvent.getNewValue());
ConsolidInfin c = new ConsolidInfin(a);
db.consolidUpdateScore(c);
buildTable ();
}
Ответы (1 шт):
Автор решения: Владислав Цой
→ Ссылка
Все оказалось гораздо проще оказывается можно еще и возвращать имя строки:
public void handle(TableColumn.CellEditEvent<ConsolidInfin, String> consolidInfinStringCellEditEvent) {
DatabaseHandler db = new DatabaseHandler();
// вот это шляпа считывает данные из редактируемой ячейки
(consolidInfinStringCellEditEvent.getTableView().getItems().get
(consolidInfinStringCellEditEvent.getTablePosition().getRow()))
.setName_of_score(consolidInfinStringCellEditEvent.getNewValue());
String a = String.valueOf(consolidInfinStringCellEditEvent.getNewValue());
ConsolidInfin c = new ConsolidInfin(a);
c.setCode((consolidInfinStringCellEditEvent.getTableView().getItems().get
(consolidInfinStringCellEditEvent.getTablePosition().getRow())).getCode());
db.consolidUpdateScore(c);
buildTable ();
}
}