【问题标题】:Java JTable saving a single cell at a time to a databaseJava JTable 一次将单个单元格保存到数据库
【发布时间】:2019-01-24 15:50:19
【问题描述】:

我是 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

例如,如果我将 1st row 3rd columndata_usersJenny 更改为 George 那么我将如何将其映射到数据库以便将其保存在正确的位置(行、列)?

【问题讨论】:

    标签: java sql sqlite sql-update jtable


    【解决方案1】:

    还需要考虑 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 ...等)

    【讨论】:

      【解决方案2】:
      1. 添加变量

        int lastChanged = 0;

      2. 在setValueAt中,添加

        lastChanged = 行;

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

      【讨论】:

      • 对不起,但这对我来说没有多大意义。我想知道查询需要什么才能保存那个单元格。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-08
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-06
      • 1970-01-01
      相关资源
      最近更新 更多