2011-03-09 5 views
0

javaから返された結果セットの次のレコードにスクロールする方法についてのヘルプが必要です。私はmysqlデータベースを使用しています。mysqlを使用してjavaでresult.beforeFirstを実行した後にresultset.nextメソッドを使用する方法

ここにformshowイベントのコードがあります。私は返される最初の結果セットをロードする場合は:

if (rs.next()) { 
       jLabel5.setText(rs.getString("Question")); 
       jRadioButton1.setText("A. " + rs.getString("A")); 
       jRadioButton2.setText("B. " + rs.getString("B")); 
       jRadioButton3.setText("C. " + rs.getString("C")); 
       jRadioButton4.setText("D. " + rs.getString("D")); 

      } 

そしてここでは、データベースを介して前方にスクロールするために使用されるようになっているボタンです。

try { 




      rs.beforeFirst(); 

      if (rs.next()) { 


       jLabel5.setText(rs.getString("Question")); 
       jRadioButton1.setText("A. " + rs.getString("A")); 
       jRadioButton2.setText("B. " + rs.getString("B")); 
       jRadioButton3.setText("C. " + rs.getString("C")); 
       jRadioButton4.setText("D. " + rs.getString("D")); 





    if (jRadioButton1.isSelected()) { 

         rval = jRadioButton1.getText().charAt(0); 
         if (String.valueOf(rval).equalsIgnoreCase(rs.getString("Answer"))) { 
          JOptionPane.showMessageDialog(null, "Correct! Your answer is " + rval + " answer is: " + rs.getString("Answer")); 


         } else { 
          JOptionPane.showMessageDialog(null, "Wrong! your answer is " + rval + " answer is: " + rs.getString("Answer")); 
         } 

       } 

       } 

      }catch (Exception e) { 
      e.printStackTrace(); 
     } 

私の質問は、私がスクロールする方法を続行しますされています。JFrameの上に表示されている事は、私が検証しようとしている変数と一致していないので、私はrs.beforeFirstを実行する必要があり データベース。 )私はrs.next(前rs.beforeFirst()を使用するときにResultSetが進まないので、私もやってみました:

while(rs.next()){...} 

それは働いていたが、それは私がラジオボタンは、私が欲しいものを選ぶことはできませんでした。また、ボタンを手動で(スクロール用に)何度もクリックしなくても、結果セットが終了するまで実行を続けました。これに対する解決策が何であるか把握してください。詳細が必要な場合は、尋ねてください。ありがとう。

+0

ラジオボタンをリストまたは配列に追加すると、もっと簡単になると思います... – Tobias

答えて

1

プレゼンテーションロジックでデータベースアクセスロジックを混同しないでください。それは、両方の懸念が互いに衝突する場合にのみ、緊密に結合されたコードにつながります。データベースジョブはできるだけ早く実行する必要があります。

懸念事項を分ける必要があります。

まず、データベースの1行を表すクラスを作成します。

public class Question { 
    private String text; 
    private String answer; 
    private String optionA; 
    private String optionB; 
    private String optionC; 
    private String optionD; 

    // Add/generate c'tors/getters/setters/equals/hashcode and other boilerplate. 
} 

(EclipseのようなビットまともなIDEがそれらを自動生成することができます)

次に、以下のJDBC仕事をしてクラス作成:

public List<Question> list() throws SQLException { 
    List<Question> questions = new ArrayList<Question>(); 
    // ... 

    try { 
     // ... 

     while (resultSet.next()) { 
      Question question = new Question(); 
      question.setText(resultSet.getString("Question")); 
      question.setAnswer(resultSet.getString("Answer")); 
      question.setOptionA(resultSet.getString("A")); 
      question.setOptionB(resultSet.getString("B")); 
      question.setOptionC(resultSet.getString("C")); 
      question.setOptionD(resultSet.getString("D")); 
      questions.add(question); 
     } 
    } finally { 
     // ... 
    }   

    return questions; 
} 

最後だけList<Question>で簡単な方法で作業を。

List<Question> questions = questionDAO.list(); 
int size = questions.size(); 
JOptionPane.showMessageDialog(null, "There are " + size + " questions!"); 

for (Question question : questions) { 
    jLabel5.setText(question.getText()); 
    jRadioButton1.setText("A. " + question.getOptionA()); 
    jRadioButton2.setText("B. " + question.getOptionB()); 
    jRadioButton3.setText("C. " + question.getOptionC()); 
    jRadioButton4.setText("D. " + question.getOptionD()); 
    // ... 
} 

結果セットを前後にマッサージする必要はありません。