2017-08-13 130 views
0

以下代码给我一个很头痛的问题。为什么我的if忽略rs.next() == truejava jsp if语句

 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 

我在做什么在这里错了吗?

回答

2

我在这里做什么错了?

您打给next()两次。第一个调用返回true,但推测第二个返回false - 如果您的查询只返回单个结果,这很有意义。

如果你真的想打印出来的值用于诊断目的,将其保存在一个局部变量:

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

* facepalm *谢谢,作品! – piguy

1

调用ResultSet#next()推进基础光标。假设用户名真的是唯一的,如果发现第一次调用next()将返回true并提前游标。当第二次调用时,光标已经耗尽了所有的数据,所以它返回false。如果你想使用这个值,你需要保留它,而不是多次调用next()。例如:

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

我并没有完全得到你的问题,但首先我们不应该写,如果像这样

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

其错误做法语句来检查这样if(boolVar == true)它应该是这样的

if(boolVar){