java jsp if 语句

java jsp if statement

下面的代码让我很头疼。为什么我的 if 忽略了 rs.next() == true

        System.out.println(rs.next());
        if (rs.next() == true) {
            System.out.println("1");
            session.setAttribute("userid", userid);
            //out.println("welcome " + userid);
            //out.println("<a href='logout.jsp'>Log out</a>");
            response.sendRedirect("success.jsp");
        } else {
            System.out.println("2");
            out.println("Invalid password <a href='index.jsp'>try again</a>");
        }

控制台:

#1 SELECT * FROM users where username = 'test' and password = 'test'

#2 true

#3 2

我哪里做错了?

What am I doing here wrong?

您正在呼叫 next() 两次。第一次调用 returns true,但大概是第二次调用 returns false - 这是有道理的,如果您的查询只有 returns 一个结果。

如果您真的想打印出该值以用于诊断目的,请将其保存在局部变量中:

boolean nextResult = rs.next();
System.out.println(nextResult);
if (nextResult) {
    ...
} else {
    ...
}

调用ResultSet#next() 推进底层游标。假设用户名确实是唯一的,如果找到,第一次调用 next() 将 return true 并前进光标。当第二次调用时,游标已经耗尽了它的所有数据,所以它 returns false。如果你想使用这个值,你需要保留它而不是多次调用next()。例如:

boolean hasNext = rs.next();
System.out.println(hasNext);
if (hasNext) {
    // Do stuff...

我没有完全理解你的问题,但首先我们不应该写这样的 if 语句

if (rs.next() == true) { 

这样检查是错误的做法if(boolVar == true)应该是这样

if(boolVar){