【问题标题】:Add row in a JTable with autoincrement of the last row id在 JTable 中添加最后一行 ID 的自动增量行
【发布时间】:2012-08-13 12:43:01
【问题描述】:

我的问题是:如何实现一个“添加行”按钮,该按钮创建一个 JTable 的新行(从 SQLite 数据库获取数据),最后一行 ID 的自动增量++。 id 列已经自动递增了数据,现在我只知道创建一个所有字段为空白的新行(没有最新行的增量++)。 请问,有人可以帮忙吗?

private void cmd_newrowActionPerformed(java.awt.event.ActionEvent evt) {
     ((DefaultTableModel) PrimaryTable.getModel()).addRow(new Vector());
}

我想要什么:

==================
id  |  data      |
==================
1   | some_data  |
2   | some_data  |
3   | some_data  |
==================


After I press addRow button:

==================
id  |  data      |
==================
1   | some_data  |
2   | some_data  |
3   | some_data  |
4   | blank      |        /// blank row data with an autoincrement of the row id
==================

更新:

好的,现在我知道如何将新行插入数据库,但我不知道如何更新 JXTable。因此,它可以工作的波纹管代码,以及在我重新启动应用程序后更新的新空白行。有人可以帮助我吗?

private void cmd_newrowActionPerformed(java.awt.event.ActionEvent evt) {
    try {
        String sql = "Insert into RDSSPrimaryTable (sample_no,mineral_name,chemical_formula,main_peaks,other_peaks,reference,link,comments,spectrum) values (?,?,?,?,?,?,?,?,?)";

        pst = conn.prepareStatement(sql);
        // no pst.setString for id - it takes automatically

        pst.setString(1, txt_sample_pt.getText());
        pst.setString(2, txt_mineral_pt.getText());
        pst.setString(3, txt_chemical_pt.getText());
        pst.setString(4, txt_main_pt.getText());
        pst.setString(5, txt_other_pt.getText());
        pst.setString(6, txt_reference_pt.getText());
        pst.setString(7, txt_link_pt.getText());
        pst.setString(8, txt_comments_pt.getText());
        pst.setBytes(9, person_image);

        JOptionPane.showMessageDialog(null, "Inserted");
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);

    }

    ((DefaultTableModel) PrimaryTable.getModel()).fireTableDataChanged(); // I tried this method even if the DefaultTableModel fire table automatically.

    PrimaryTable.repaint(); //tried also repaint, revalidate - nothing happens

}

【问题讨论】:

  • 为什么不让数据库增加你的ID,然后获取自动增加的ID值并将其转储到JTable上?因此,首先在数据库中创建具有自动递增 id 的新行,然后将其读回以在 JTable 中显示它
  • 带有插入语句和 (?) 值?
  • 那么困难的部分是什么?只需插入没有值的行并读取最后一行的 ID
  • 读完所有行数后?下一步?
  • 请学习 java 命名约定并遵守它们 - 现在

标签: java swing jdbc jtable auto-increment


【解决方案1】:

使用以下代码在您的数据库中创建一个序列

CREATE SEQUENCE sample_number
  START WITH     1
  INCREMENT BY   1;

之后在您的代码中进行以下更改:

String sql = "Insert into RDSSPrimaryTable (sample_no,mineral_name,chemical_formula,main_peaks,other_peaks,reference,link,comments,spectrum) values (sample_number.nextval(),?,?,?,?,?,?,?,?)";

pst = conn.prepareStatement(sql);

pst.setString(1, txt_mineral_pt.getText());
pst.setString(2, txt_chemical_pt.getText());
pst.setString(3, txt_main_pt.getText());
pst.setString(4, txt_other_pt.getText());
pst.setString(5, txt_reference_pt.getText());
pst.setString(6, txt_link_pt.getText());
pst.setString(7, txt_comments_pt.getText());
pst.setBytes(8, person_image);

【讨论】:

  • 感谢您的宝贵时间。它由数据库本身解决的增量行,它的第一列 ID 带有 AUTO INCREMENT 选项。现在的问题是新创建的行没有出现在 JXTable 中。在我重新启动应用程序后出现。有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-26
  • 2016-03-11
  • 2012-12-19
相关资源
最近更新 更多