区分大小写查询

时间:2013-08-01 09:12:52

标签: java mysql jdbc

我正在创建一个登录表单,我希望密码具有案例敏感性。我写了以下代码。如何使用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");
}

3 个答案:

答案 0 :(得分:4)

嗯,密码应该用sha1之类的函数进行哈希处理(至少!)。 Sha1为不同的大写字母返回一个完整的其他值。

如果你有不区分大小写的结果,你可能会保存纯文本,应该先修改它!

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

您也可以将数据库列更改为utf8_general *而不是utf8_general_ci *,ci表示CaseInsentative。但你真的不想这样做 * 假设您使用utf8


我不知道java中可用的函数,但原则保持不变。我建议你做一些关于如何使用java存储密码的研究:)

答案 1 :(得分:2)

以纯文本格式存储密码是个坏主意。至少使用md5哈希。

答案 2 :(得分:2)

除了其他更好的建议之外,您可以尝试使用BINARY OPERATOR,这将迫使MySQL检查确切的案例。

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

恕我直言,Martijn's answer是你应该遵循的。