Java IF-ELSE语句

Java IF-ELSE语句,java,resultset,Java,Resultset,快速提问。我得到了下面的代码,它检查数据库中是否有给定的ID,如果有,它将检索该ID的所有考勤历史记录,否则如果该ID在数据库中不存在,它将显示一条错误消息。然而,我得到的代码总是说记录已附加,然后显示错误消息,不管ID是否存在。我想我可能必须改变代码的顺序或者类似的?你能给我个建议吗 JButton button = new JButton("Submit"); button.addActionListener(new ActionListener() { @S

快速提问。我得到了下面的代码,它检查数据库中是否有给定的ID,如果有,它将检索该ID的所有考勤历史记录,否则如果该ID在数据库中不存在,它将显示一条错误消息。然而,我得到的代码总是说记录已附加,然后显示错误消息,不管ID是否存在。我想我可能必须改变代码的顺序或者类似的?你能给我个建议吗

    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();
        }
        }
        });

您反复调用
rs.next()
,直到它返回false(否则您将永远无法退出while循环),然后再次调用
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");
}

你正在做第二个rs.next,如果有第二个记录的话,它将进入第二个记录。如果只有一个(它已经在你的应用程序中被进一步使用),那么它会失败,给你一个成功,然后是一个失败

while ( rs.next() ) {

if (!rs.next()) {

没有任何意义,因为
if
将始终执行。你的循环将继续,直到
rs.next()
返回false。

AARGH为什么我总是被JON SKEET打败???“我有那么多美好的话要说……”乔恩·斯基特,谢谢你的建议。您的代码可以工作,但不会循环?因为我们得到的是if语句而不是while语句。如果我必须使用给定的ID记录怎么办?我刚刚试过,它只显示了第一条记录,即使给定ID有两条记录?@PitaSivam:不,它不会循环。循环似乎没有任何意义,因为您只是在控制台上打印。如果您确实想循环,您可能只需要创建一个
列表
或类似的东西,然后在循环后,您可以检查列表是否为空。您可以建议如何使用列表吗?我想我需要循环,因为代码需要遍历数据库并挑选出具有给定ID的所有记录,一旦遍历,并且没有记录,它应该显示错误消息。如果找到记录,显然,它不应该显示错误消息?@PitaSivam:首先,你需要一个
考勤
类来表示日期和学生。然后创建
ArrayList
的实例。在循环中,您将创建一个
考勤的实例
,并将其添加到列表中。老实说,如果这对您来说是一个新领域,那么在继续使用数据库之前,您真的应该后退一步,看看Java的核心(集合,创建您自己的类)。