Java JTable, сохраняющий одну ячейку за раз в базе данных - PullRequest
0 голосов
/ 24 января 2019

Я новичок в Java, так что это, вероятно, простая проблема для давнего программиста Java.

В любом случае, моя проблема связана с использованием JTable . Я хочу загрузить / сохранить данные в этой JTable. Проблема в том, что я не уверен как сохранить ячейку, которую пользователь каким-то образом изменил .

Событие click выглядит следующим образом:

@SuppressWarnings("serial")
class EditableTableModel extends AbstractTableModel {
     String[] columnTitles;
     Object[][] dataEntries;
     int rowCount;

     public void setValueAt(Object value, int row, int column) {
         //Any change to the table
         dataEntries[row][column] = value;
     }
}

Эта функция прекрасно срабатывает всякий раз, когда я меняю любую из ячеек в jTable. Кроме того, дает мне номер строки и столбца из этой отредактированной ячейки вместе с, конечно, значением, которое было изменено на . Но мой вопрос таков:

Как мне сохранить данные в моей базе данных, если это просто значение ячейки за раз?

Моя структура базы данных выглядит следующим образом (которая имеет тот же макет / порядок, что и структура jTable):

ID  | Data_script | data_status | data_users | data_error | data_rundate | lastUserWhoMod
-------------------------------------------------------------------------------------------
1   | Inquiries   | Passed      | Bob        | No errors  | 01/20/2019   | Bob
2   | Reporting   | Passed      | Jenny      | No errors  | 01/20/2019   | Bob
3   | Background  | Failed      | Bob        | Lines 4,8  | 01/20/2019   | Jenny 
4   | Maintenance | Passed      | George     | No errors  | 01/20/2019   | Bob

Так, например, если я изменю 1-й ряд 3-го столбца , который равен data_users , с Дженни на Джорджа , то как бы Я сопоставляю , что с базой данных , чтобы сохранить его в правильном месте (строка, столбец)?

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Необходимо учитывать также ключ таблицы (pk предположить идентификатор).

public void setValueAt(Object value, int row, int column) {
     Object obj_key = dataEntries[row][0]; //assume id
     //Any change to the table
     dataEntries[row][column] = value; 

     //obj_key mapped inside method from Object to int
     //get appropriate field_name from column index
     run_sql(obj_key, row, column) 

 }

необработанный запрос на обновление

update table_name
set [computed_field_name] = column_new_value (dataEntries[row][column])
where id = obj_key

Поскольку вы заранее знаете соответствующие имена для столбцов, необходимо также правильно настроить field_name (если col = 1, тогда data_script ... и т. д.)

0 голосов
/ 24 января 2019
  1. добавить переменную

    int lastChanged = 0;

  2. В setValueAt добавьте

    lastChanged = строка;

и вызовите функцию в отдельном потоке, чтобы обновить базу данных для всей записи, на которую указывает lastChanged. Эта функция должна сбросить значение lastChanged на -1. Вызов к БД должен выполняться в отдельном потоке, поскольку setValueAt будет выполняться в потоке, который Java использует для рисования графического интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...