[英]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_users从Jenny更改为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 )
添加变量
int lastChanged = 0;
在 setValueAt 中,添加
lastChanged = 行;
并在单独的线程中调用一个函数来更新整个记录的数据库,由 lastChanged 指出。 该函数必须将 lastChanged 的值重置为 -1。 对 DB 的调用必须在单独的线程中执行,因为 setValueAt 将在 Java 用于绘制 GUI 的线程中执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.