2013-08-01 147 views
2

我正在創建一個登錄表單,我希望密碼區分大小寫。我寫了下面的代碼。如何使用where子句使其區分大小寫。區分大小寫查詢

PreparedStatement stm = con.prepareStatement(" select * from user where userid =? and password =?"); 

stm.setString(1, userid); 
stm.setString(2, pswd);   
ResultSet rs =stm.executeQuery(); 
if (!rs.next()) { 
    JOptionPane.showMessageDialog(this, "Invalid Id/Password"); 
} 

回答

2

除了其他更好的建議,你可以嘗試的一件事是使用BINARY OPERATOR,這將迫使MySQL檢查確切的情況。

select * from user where userid=? and BINARY password=? 

恕我直言,Martijn's answer是你應該遵循的。

+0

謝謝。有效 :) – Malwaregeek

4

那麼,密碼應該散列(至少!)與功能,如sha1Sha1爲不同的首都返回一個完整的其他值。

如果你有不區分大小寫的結果,你很可能會將它保存爲純文本,應該修改它。

String - sha1 value 
example - c3499c2729730a7f807efb8676a92dcb6f8a3f8f 
Example - 0f01ed56a1e32a05e5ef96e4d779f34784af9a96 
eXample - decb1226835e95f0441ec4ee0ecd9283796a9cfb 

你也可以改變你的DB列utf8_general *代替utf8_general_ci *,CI表示CaseInsentative。但是,你真的不希望做這樣
* Asuming您使用UTF8


我不知道在java中可用的功能,但原則保持不變。我建議你做一些關於如何使用java存儲密碼的研究:)

+1

對於密碼我建議使用更強大,更安全的散列,如pbkdf2,bcrypt或scrypt –

+0

啊'pbkdf2',我昨天在找那個,忘了名字。你是對的,但更多的是關於我的原則。 +1 – Martijn

+0

感謝您的出色建議,我會深入研究這一點。 – Malwaregeek

2

以純文本存儲密碼是一個壞主意。至少使用md5哈希。

+0

不,sha1至少:) md5應該被認爲對於那些有合理時間的人來說是易碎的 – Martijn

+0

謝謝你的提示。我是初學者,請記住下次:) – Malwaregeek