Java 使用最后一行id的自动增量在JTable中添加行
我的问题是:如何实现一个“addrow”按钮,用最后一行id的autoincrement++创建JTable的新行(从SQLite数据库获取数据)。 id列的数据已经自动递增,现在我只知道创建一个所有字段都为空的新行(没有最新行的增量+)。 拜托,有人能帮忙吗Java 使用最后一行id的自动增量在JTable中添加行,java,swing,jdbc,jtable,auto-increment,Java,Swing,Jdbc,Jtable,Auto Increment,我的问题是:如何实现一个“addrow”按钮,用最后一行id的autoincrement++创建JTable的新行(从SQLite数据库获取数据)。 id列的数据已经自动递增,现在我只知道创建一个所有字段都为空的新行(没有最新行的增量+)。 拜托,有人能帮忙吗 private void cmd_newrowActionPerformed(java.awt.event.ActionEvent evt) { ((DefaultTableModel) PrimaryTable.getMode
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);
为什么不让数据库增加ID,然后获取自动增加的ID值并将其转储到JTable上?所以,首先用自动递增的ID在数据库中创建新行,然后用insert语句和(?)值将其读回JTABLE中显示?那么困难的部分是什么呢?在读取所有行的数量后,只需插入不带值的行并读取最后一行的ID?下一步呢?请学习java命名约定并坚持它们-现在谢谢您的时间。增量行由数据库本身解决,它具有第一列ID和自动增量选项。现在的问题是新创建的行没有出现在JXTable中。在我重新启动应用程序后出现。有什么建议吗?