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";
            } 
    }
  }

これはどのように発生し、どうすれば解決できますか?

4

2 に答える 2

4

DBテーブル全体をJavaのメモリにコピーし、whileすべてのレコードをループして比較します。レコードと一致する場合はループを中止しないwhileため、残りのレコードをループし続けるため、pagename毎回「start」でオーバーライドされます。

breakステートメントを追加する必要があります。

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";
}

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

于 2012-05-11T20:21:07.713 に答える
0

これを行うために、なぜテーブル全体をループするのですか?1000000レコードがある場合はどうなりますか?ユーザー名とパスワードのパラメーターを渡すWHERE句を使用してデータベースにクエリを実行し、行が返されるかどうかを確認する必要があります。

于 2012-05-11T20:25:08.693 に答える