如何在Java中识别数据库记录?

时间:2017-03-24 03:47:38

标签: java mysql swing

我创建了一个带有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 + "\'");

    }

1 个答案:

答案 0 :(得分:2)

  

我通常会通过主键识别记录

因此,当您将数据添加到class C class B 2 时,您需要将主键保留为TableModel

中的一列数据
  

如果我只有新值以及行号和列号,我无法弄清楚如何知道要在真实数据库中更新哪条记录。

如果您有行号,则可以访问该行的任何列中的数据。

在这种情况下,您需要从TableModel获取数据,因此您可以使用:

TableModel

获得主键后,可以使用where子句中的主键构建SQL。

如果您不希望用户看到主键,则可以使用:

table.getModel().getValueAt(row, theColumnForThePrimaryKey);

数据仍然在模型中,只是在表格中看不到。

注意:如果您的表已排序,那么您需要使用table.removeColumn( table.getColumn( ...) ); 方法获取正确的行来访问table.convertRowIndexToModel(...)中的数据。