繁体   English   中英

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

[英]Java JTable saving a single cell at a time to a database

我是 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_usersJenny更改为George,那么我将如何将其映射到数据库将其保存在正确的位置(行、列)?

还需要考虑 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 ( if col=1 then data_script ...etc )

  1. 添加变量

    int lastChanged = 0;

  2. 在 setValueAt 中,添加

    lastChanged = 行;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM