2012-03-06 11 views
0

クイック質問。以下のコードでは、データベースで特定のIDが使用可能かどうかをチェックし、そうであればIDの出席履歴をすべて取得します。そうでない場合、IDがデータベースに存在しない場合はエラーメッセージが表示されます。しかし、私が得たコードは、常にレコードが添付されていると言って、IDの有無にかかわらずエラーメッセージも表示します。おそらくコードの順番などを変えなければならないと思いますか?アドバイスをお願いしますか?Java IF ELSEステートメント

JButton button = new JButton("Submit"); 
    button.addActionListener(new ActionListener() { 
     @SuppressWarnings("unused") 
     public void actionPerformed(ActionEvent arg0) { 


     String studentID = textField.getText(); 

     try { 

      Statement st = con.con.createStatement(); 
      ResultSet rs = st.executeQuery("SELECT StudentID, date FROM attendance WHERE StudentID ="+textField.getText()); 


      while (rs.next()) { 
       String student = rs.getString("StudentID"); 
       String date = rs.getString("date"); 
       System.out.println(student+""); 
       System.out.println(date); 
      } 

      JOptionPane.showMessageDialog(frmAttendanceHistory, "Attendance has been registered."); 
      frmAttendanceHistory.setVisible(false); 

      if (!rs.next()) { 
      JOptionPane.showMessageDialog(frmAttendanceHistory, "A record for the given Student ID doesn't exist"); 
      } 

     } 


     catch (SQLException e) { 
     JOptionPane.showMessageDialog(frmAttendanceHistory, "Attendance couldn't be registered. Please try again!"); 
     e.printStackTrace(); 
     } 
     } 
     }); 

答えて

1

それがfalseを返すまで(そうしないと、whileループから抜け出すことは決してないだろうと)あなたが繰り返しrs.next()を呼んでいる - そして、あなたは再びrs.next()を呼んでいます。なぜあなたはそれが真実に戻ってくると思いますか?

if (rs.next()) { 
    String student = rs.getString("StudentID"); 
    String date = rs.getString("date"); 
    System.out.println(student+""); 
    System.out.println(date); 
    JOptionPane.showMessageDialog(frmAttendanceHistory, 
     "Attendance has been registered."); 
    frmAttendanceHistory.setVisible(false); 
} else { 
    JOptionPane.showMessageDialog(frmAttendanceHistory, 
     "A record for the given Student ID doesn't exist"); 
} 
+1

なぜ、私はいつもジョンスカートによってNINJAを手に入れますか?私は言うべきたくさんの美しいものがありました... – Tudor

+0

@Jon Skeet、あなたのアドバイスのおかげで。あなたのコードは動作しますが、それはループしませんか? whileステートメントではなくifステートメントが得られます。与えられたIDで記録する必要がある場合はどうすればいいですか?私はちょうどそれを試したので、私は与えられたIDの2レコードを持っていますが、それは最初のレコードを表示しただけですか? –

+0

@PitaSivam:いいえ、ループしません。あなたがコンソールに印刷しているだけなので、ループには何のポイントもないようです。もしあなたがループしたいならば、おそらく 'List 'などを作成し、ループの後でリストが空であるかどうかを確認するだけです。 –

0

あなたは1があった場合は、2番目のレコードに行くと二rs.nextを、やっている:

は、私はあなたのような何かをしたいと思います。あなたのアプリでもうすでに消費されているものが1つしかない場合、それはあなたの成功に続いて失敗をもたらすことに失敗します。 ifが常に実行されるよう

if (!rs.next()) { 

続い

0
while (rs.next()) { 

はどんな意味がありません。ループはrs.next()がfalseを返すまで続きます。

関連する問題