2016-04-27 6 views
2

データベース情報でユーザー入力を検証しようとしています。ユーザーがユーザー名を入力すると、データベースと一致するかどうかがチェックされます。データベースによるJavaユーザー名とパスワードの検証

public void login() throws SQLException { 
     boolean loginUsername = false; 
     boolean loginPassword = false; 
     String input = null; 

     while(input == null) { 
      System.out.println(message.loginUsername()); 
      input = in.nextLine(); 

      try { 
       preparedStatement = connect.prepareStatement("SELECT username FROM doom.accounts;"); 
       rs = preparedStatement.executeQuery(); 

       while(rs.next()) { 
        String username = rs.getString("username"); 

        if(!input.equals(username)) { 
         System.out.println(message.invalidUsername()); 
         input = null; 
        } else { 
         loginUsername = true; 
        } 
       } 
      } catch(SQLException e) { 

      } finally { 
       if(statement != null) { 
        statement.close(); 
       } 
      } 
     } 
} 

私は方法のユーザー名部分を投稿しました。私はデバッグして、私のユーザ入力がデータベースから有効なユーザ名と等しいことを確認することができますが、それはすべきではないときに私はまだ無効なユーザ名のメッセージを受け取ります。

+6

データベースを使用しているので、SQL文で 'where'句を使用して、正しいユーザー名を持つテーブルの行をデータベースで検索させてみましょう。それははるかに効率的です。 – hexafraction

+0

heed @ hexafractionのアドバイス。あなたがそれをやっている方法は非常に非効率です。 – JJF

+0

データベースの列名が 'username'ではなく' USERNAME'に戻っている可能性がありますので、 'rs.getString(" USERNAME ")'または 'rs.getString(1)'を試してみてください。 @hexafractionのような 'where'節を使ってください。 – GriffeyDog

答えて

2

SQLクエリを記述してテストし、文字列に等号チェックを実行しても、両方の文字列が同じであることを確認してください。

ケースが重要でない場合はequalsIgnoreCase()を使用できます。

より良いアプローチは、これまであなたのクエリを変更するには次のようになります。

select username from doom.accounts where username like ? 

は除外することを忘れないでください「;」

は、PreparedStatementのを見て、あなたが見hereを持つことができます?

にユーザー名を設定します。

関連する問題