2012-03-06 5 views
0

Быстрый вопрос. Я получил код ниже, который проверяет с базой данных, доступен ли данный идентификатор в базе данных, если это так, он извлекает все истории посещаемости для идентификатора, иначе, если идентификатор не существует в базе данных, он должен отображать сообщение об ошибке , Однако код, который я получил, всегда говорит, что запись была прикреплена, а затем отображает сообщение об ошибке, независимо от того, существует ли идентификатор или нет. Думаю, мне, вероятно, придется изменить порядок кода или такой? Могли бы вы, пожалуйста, посоветовать?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

Вы неоднократно вызывая 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

AARGH ПОЧЕМУ Я ВСЕГДА ПОЛУЧИТЬ НИНЖАЙ ДЖОН СКАЙТ ??? У меня было так много прекрасных вещей, чтобы сказать ... – Tudor

+0

@ Jon Skeet, спасибо за советы. ваш код работает, однако он не работает? поскольку мы получили оператор if, а не оператор while. что делать, если мне нужно записывать данные с данным ID? как я только что пробовал, он отобразил только первую запись, хотя у меня есть 2 записи для данного ID? –

+0

@PitaSivam: Нет, это не цикл. Казалось, что нет никакого цикла в цикле, учитывая, что вы просто печатаете на консоли. Если вы хотите сделать цикл *, вы должны просто создать «Список » или что-то в этом роде, то после цикла вы можете проверить, пуст ли список. –

0

Вы делаете второй rs.next, который пошел бы на второй записи, если там был один. Если есть только один (который уже потребляется дальше в вашем приложении), то он не дает вам успеха, после чего произойдет сбой.

0
while (rs.next()) { 

следуют

if (!rs.next()) { 

Не имеет никакого смысла, так как if всегда будет выполняться. Ваш цикл будет продолжаться до тех пор, пока rs.next() не вернет false.

Смежные вопросы