Java JTable一次将一个单元格保存到数据库

时间:2019-01-24 15:50:20

标签: java sql sqlite sql-update jtable

我是Java的新手,所以这对长期使用Java的程序员来说可能是一个容易的问题。

无论如何,我的问题是使用 JTable 。我想在该JTable中加载/保存数据。问题是我不确定如何保存用户已更改的单元格

点击事件如下所示:

@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

例如,如果我将 data_users 第一行第三列 Jenny 更改为 George 那么我如何映射到数据库,以便将其保存在正确的位置(行,列)?

2 个答案:

答案 0 :(得分:0)

  1. 添加变量

    int lastChanged = 0;

  2. 在setValueAt中,添加

    lastChanged = row;

并在单独的线程中调用函数以更新数据库的整个记录​​(由lastChanged指出)。该函数必须将lastChanged的值重置为-1。 对DB的调用必须在单独的线程中执行,因为setValueAt将在Java用于绘制GUI的线程中执行。

答案 1 :(得分:0)

还需要考虑table_key(pk假定为id)。

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

由于您事先知道cols的对应名称,因此也需要正确设置 field_name(如果col = 1则为data_script ... etc)