2017-08-13 11 views
0

次のコードは私に大きな頭痛を与えます。 ifはなぜrs.next() == trueを無視しますか?java 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()を2度呼びます。最初の呼び出しではtrueが返されますが、おそらく2番目の呼び出しではfalseが返されます。クエリが1つの結果しか返さない場合は意味があります。

あなたは本当に、診断目的のために値をプリントアウトし、ローカル変数に保存したい場合:

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

* facepalm *ありがとうございます! – piguy

1

ResultSet#next()を呼び出すと、基本となるカーソルを進めます。ユーザー名が本当に一意であると仮定すると、next()の最初の呼び出しはtrueを返し、カーソルを進めます。 2番目の呼び出しが行われると、カーソルはすでにすべてのデータを使い果たしているので、falseを返します。この値を使用する場合は、next()を複数回呼び出す代わりに、この値を保持する必要があります。例:

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

私は正確にあなたの問題を取得しますが、まずこの

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

その間違った練習のような文はこのように、それはこの

ようにする必要があり if(boolVar == true)をチェックするならば、我々は書くべきではありませんしませんでした
if(boolVar){ 
関連する問題