-1
private void cmd_nextActionPerformed(java.awt.event.ActionEvent evt) {     

  pst=conn.prepareStatement("select * from questions where subject= ?");
            pst.setString(1, "websites");
            rs=pst.executeQuery();
   while(rs.next())
            {

                 qs=rs.getString("question");
                 option1=rs.getString("option1");
                 option2=rs.getString("option2");
                 option3=rs.getString("option3");
                 txt_quest.setText(qs);
                jcb_opt1.setText(option1);
                jcb_opt2.setText(option2);
                jcb_opt3.setText(option3);

       }
    catch(Exception ex)
    {
        JOptionPane.showMessageDialog(null, ex);
    }
            }

ボタンをクリックするとテーブルから次の行を取得し、nextボタンをクリックすると前の行を取得しpreviousます。簡単にできる方法はありませんか?...

4

2 に答える 2

1

rs.next() を取得したいだけのメソッドでは、" select * from question " を実行しないでください。rs.previous() を取得したい場合は、もう一度「* を選択」しますか? select をプログラムの先頭に配置します。

cmd_nextActionPerformedを適切に設計するには、次の 3 つのケースを考慮する必要があります。

  1. DB テーブルが空であるか、エントリが 1 つしかありません。この場合、次のエントリがないため、次へボタンを無効にする必要があります。

  2. 次のエントリがあります。データを取得し、JTextFields を更新します。次へボタンを有効にする必要があります。

  3. あなたは最後にいます。rs.next() チェックの後、rs.isAfterLast() が true を返す場合、rs.last() に移動してそこにとどまる必要があります。次へボタンを無効にする必要があります。

良いニュースは、cmd_previousActionPerformedが対称であることです。

于 2013-04-08T21:09:55.390 に答える
0

次のために、

rs.next()

以前の、

rs.previous();
于 2013-04-09T17:06:39.210 に答える