2012-05-11 8 views
0

何らかの理由により、ログインはデータベース内の最後のユーザーに対してのみ機能します。私はwhileループを持っていますが、私はそれが最後のユーザーに行くプログラムを作ると思います。私は、最初のユーザーがログインすることができ、その後if文を使用してみましたが。ログインはデータベース内の最後のユーザーにのみ適用されます

if (username!=null && password!=null) { 
    pagename = "main"; 
    } else { 
    username = request.getParameter("username"); 
    password = request.getParameter("password"); 

      while(results.next()) 
      { 
      if(results.getString(2).equals(password) && results.getString(1).equals(username)) 
      { 
      pagename="main"; 
      } 
      else 
      { 
      pagename="start"; 
      } 
    } 
    } 

これが原因とされており、どのように私はそれを解決できますか?

+0

これは、ループ – kosa

+0

-1を使用する場合に注意する必要があるケースの1つです。これはデバッガを使用するだけで解決できました... – home

+0

@home:または論理的意味:) – BalusC

答えて

4

DBテーブル全体をJavaのメモリにコピーし、すべてのレコードに対してwhileというループで比較しています。レコードとの一致があるときにwhileループを中断していないので、残りのレコードをループし続け、pagenameは毎回「開始」で上書きされます。 、

if (results.getString(2).equals(password) && results.getString(1).equals(username)) { 
    pagename="main"; 
    break; 
} 

それとも、より良いSQLは、それがために設計されて仕事をしてみましょう、あなたが必要な正確データを選択し、を返す:

preparedStatement = connection.prepareStatement("SELECT id FROM user WHERE username=? AND password=MD5(?)"); 
preparedStatement.setString(1, username); 
preparedStatement.setString(2, password); 
resultSet = preparedStatement.executeQuery(); 

if (resultSet.next()) { 
    pagename = "main"; 
} 
else { 
    pagename = "start"; 
} 
をあなたはbreakステートメントを追加する必要が

それはより効率的で賢明です。

+0

mysqlの説明をありがとう – toky

+0

よろしくお願いします。 – BalusC

0

なぜこれを行うにはテーブル全体をループしますか?もし1000000レコードがあれば? WHERE節でユーザー名とパスワードのパラメータを渡してデータベースを照会し、返された行があるかどうかを確認する必要があります。

関連する問題