0

私の質問は、最後の行IDの自動インクリメント++を使用して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

}
4

1 に答える 1

0

次のコードを使用して、データベースにシーケンスを作成します

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);
于 2012-08-20T14:23:56.667 に答える