繁体   English   中英

在JTable中添加行,并自动增加最后一行ID

[英]Add row in a JTable with autoincrement of the last row id

我的问题是:我该如何实现“添加行”按钮,以使用最后一行ID的autoincrement ++来创建JTable的新行(从SQLite数据库获取数据)。 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

}

使用以下代码在数据库中创建序列

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM