2016-05-04 7 views
0

このクエリは実行されず、コードはブロックされます。クエリ で ISSUEは、while文であってもよい....ログインプログラムのMysqlテーブル値(名前、パスワード)の取得方法

try { 

    getConnection(); 

    String user = text.getText().trim(); 
    String pass = password.getText().trim(); 

    String query = "Select name,password from pharmacy.login where name = '" + user + "' and password = '" + pass + "'"; 

    result = statement.executeQuery(query); 

    System.out.println("hii"); 
    int count = 0; 

    while (result.next()) { 
     count++; 
    } 
} 
+0

ご質問はありますか?ご質問は何ですか? – suulisin

+0

コードを適切に書式設定する方法については、[here](http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks)を参照してください。 – Aconcagua

答えて

1

あなたのコードは、SQLインジェクションしがちですが、読み取りにしてください状況を与えられました。

クエリが実行されない理由を見つけるには、例外をキャッチしてログに記録する必要があります。あなたの問題を解決する方法に関する有用な情報を提供するかもしれません。

しかし、あなたの目標はただ見つかったレコードを数えることであるならば、あなたはにクエリを変更する必要があります。しかし、あなたのコードは、SQLインジェクションの傾向がある

select count(*) from pharmacy.login where name='...' and password='...' 

通常、PreparedStatement?またはORMフレームワークを使用してユーザーオブジェクトを取得する必要があります。検索条件はユーザー名のみにする必要があります。

select username, password from pharmacy.login where name = ? 

パスワードフィールドのデータベースの内容は暗号化する必要があり、ユーザーのパスワードの入力値も暗号化する必要があります。

ユーザーオブジェクトを取得した後、暗号化されたパスワードフィールドと暗号化された入力パスワード値を比較する必要があります。

+0

私は以下のような変種が好きです: 'String pass = sha256(password.getText()。trim());'(sha256を使用している場合はMessageDigestを使い切ってください) =? ANDパスワード=? '。私は列の名前をpw_hashまたは何かに変更する傾向があります...まだ良い答え、+1。 – Aconcagua

+0

役立つ場合:Javaでダイジェストを計算する方法については、[こちら](http://stackoverflow.com/questions/3103652/hash-string-via-sha-256-in-java)を参照してください。 – Aconcagua

関連する問題