0

Java では、前後に 2 つのボタンを使用してクエリを実行して取得した結果セットをナビゲートする場合。このタスクを実行する方法は何ですか

    private void nextActionPerformed(java.awt.event.ActionEvent evt) {                                            
        if(evt.getSource()==bt_previous){
        DBUtil util = new DBUtil();
             try {
                        Connection con = util.getConnection();
                        PreparedStatement stmt = con.prepareStatement("SELECT * FROM DETAILS where id=?");
                        ResultSet rs;
                        String rm = id.getText().trim();
                        stmt.setLong(1, Long.parseLong(rm));
                        rs = stmt.executeQuery();
                        while(rs.next()){

                        String a = rs.getString("weight");
                        txtboxwgt.setText(a);
                        String b = rs.getString("note_state");
                        cbnotstat.setSelectedItem(b);
                        String c = rs.getString("dm_state");
                        cbdmnstat.setSelectedItem(c);
                                      }
                   } catch (Exception e) {
                             JOptionPane.showMessageDialog(null, e.getMessage());
                         }
            }


        } 
4

2 に答える 2

1

結果をページ付けする必要があります。私の知る限り、結果セットで実行できる簡単なタスクはなく、組み込み機能もありません。次のオプションがあります。

  1. 各行をオブジェクトに変換し、実際にオブジェクトを表示します。これまでに表示されたページのリストを保持し、必要に応じて (後方への移動のために) それらを提供し、前方への結果セットを使用します。ただし、これには制限があります。大量のオブジェクトがある場合、システムのメモリの限界に達する可能性があるため、少量のオブジェクトがあることがわかっている場合を除き、お勧めしません。

  2. 追加のデータベース テーブルを使用してページ分割します。このために、構造を持つ追加のテーブルを作成します: page, item_id. 名前を付けてhistory_tableください。次に、最初の 50 個のオブジェクトを読み取ります (一度に 50 行を表示すると仮定します)。それがページ 1 です。一意の識別子をページ番号と共に履歴テーブルに挿入します。前のページに戻る必要がある場合は、前のページから一意の ID を読み取ります。先に進む場合は、select を実行します。

今後の sql ステートメントは次のようになります。

select * from my_table a where not exists (select 1 from history_table h where a.item_id = h.item_id)

これは、必要なすべてのページに対して実行します (最初のページでも!)

以前に読み取った要素をデータベースに挿入するには、バッチ挿入を使用する必要があります。

于 2013-01-19T10:40:52.707 に答える
1

エンティティ クラスを作成しDetailます。

public class Detail {
    private String weight;
    private String noteState;
    private String dmState;

    public Detail() {

    }

    public Detail(String weight, String noteState, String dmState) {
        this.weight = weight;
        this.noteState = noteState;
        this.dmState = dmState;
    }
    // getters and setters below
}

結果セットを反復処理するときのnextActionPerformedメソッドで、エンティティの新しいインスタンスを作成し、それをいくつかのコレクションに追加しますLinkedList

                List<Detail> allDetails = new LinkedList<Detail>();
                while(rs.next()) {

                    String a = rs.getString("weight");
                    String b = rs.getString("note_state");
                    String c = rs.getString("dm_state");
                    allDetail.add(new Detail (a, b, c));
                }

allDetailsその後、 でサポートされている任意の方法で をナビゲートできますLinkedList。または、LinkedList がニーズに合わない場合は、別のコレクションの使用を検討してください。

于 2013-01-19T10:42:30.890 に答える