我是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 那么我如何映射该到数据库,以便将其保存在正确的位置(行,列)?
答案 0 :(得分:0)
添加变量
int lastChanged = 0;
在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)