我创建了一个带有DefaultTableModel的JTable,它使用来自MySQL数据库的数据填充。我使表格单元格可编辑,当用户更改记录并取消选择单元格时,我会调整事件。我打算在触发此事件时更新JTable中更改的MySQL数据库记录。 现在,我让它打印一条关于控制台更改的消息: (2,1)处的值更改为“最大” 但是,如果我只有新值以及行号和列号,我怎么知道如何知道在真实数据库中要更新哪条记录。
在Web开发中,我通常会通过主键识别记录并将属性值设置为新值,如何在Java中执行?
这是表格部分的代码:
DefaultTableModel tModel;
tModel = new DefaultTableModel(data, colNames);
tModel.addTableModelListener(this);
table = new JTable(tModel);
@Override
public void tableChanged(TableModelEvent e) {
DefaultTableModel model = (DefaultTableModel)e.getSource();
int row = e.getFirstRow();
int column = e.getColumn();
String cellValue = String.valueOf( table.getValueAt(row, column) );
System.out.println("Value at (" + row + "," + column + ") changed to " + "\'" + cellValue + "\'");
}
答案 0 :(得分:2)
我通常会通过主键识别记录
因此,当您将数据添加到class C
class B
2
时,您需要将主键保留为TableModel
如果我只有新值以及行号和列号,我无法弄清楚如何知道要在真实数据库中更新哪条记录。
如果您有行号,则可以访问该行的任何列中的数据。
在这种情况下,您需要从TableModel
获取数据,因此您可以使用:
TableModel
获得主键后,可以使用where子句中的主键构建SQL。
如果您不希望用户看到主键,则可以使用:
table.getModel().getValueAt(row, theColumnForThePrimaryKey);
数据仍然在模型中,只是在表格中看不到。
注意:如果您的表已排序,那么您需要使用table.removeColumn( table.getColumn( ...) );
方法获取正确的行来访问table.convertRowIndexToModel(...)
中的数据。