Java中的SQL。选择密码(md5)问题。rs未执行查询,正在引发异常

Java中的SQL。选择密码(md5)问题。rs未执行查询,正在引发异常,java,mysql,sql,prepared-statement,md5,Java,Mysql,Sql,Prepared Statement,Md5,我有一个需要用户名、密码和ID的登录系统。数据库中的密码以MD5格式加密。我的测试密码是test1,加密后的密码是5a105e8b9d40e1329780。登录屏幕上的用户应键入test1作为密码,并被允许进入系统。我只是不断收到我的弹出消息 我的SQL查询如下所示: String SQL = "SELECT login_judge.username, login_judge.password ,criminalrecords.ID FROM login_judge, criminalrecor

我有一个需要用户名、密码和ID的登录系统。数据库中的密码以MD5格式加密。我的测试密码是test1,加密后的密码是5a105e8b9d40e1329780。登录屏幕上的用户应键入test1作为密码,并被允许进入系统。我只是不断收到我的弹出消息

我的SQL查询如下所示:

String SQL = "SELECT login_judge.username, login_judge.password ,criminalrecords.ID FROM login_judge, criminalrecords "
           + "WHERE username = ? and password = md5(?) and ID = ?";
pst = conn.prepareStatement(SQL);
pst.setString(1, usernameF.getText());
pst.setString(2, passwordF.getText());
pst.setString(3, caseNoF.getText());

rs = pst.executeQuery();
if(rs.next())
{
    // rest of code
}
else
{
   // joption pane displaying info that something is wrong.
}
来自phpMyadmin

UPDATE  `w1283057`.`login_judge` SET  `password` = MD5(  'test1' ) WHERE  `login_judge`.`username` =  'test1';

您的密码字段对于MD5哈希值来说太短。它应该有至少32个字符的空间,但看起来您已经定义了最多20个字符

将md5test1的输出与表中的值进行比较:

5a105e8b9d40e1329780d62ea2265d8a
5a105e8b9d40e1329780
由于哈希值不相等,因此拒绝登录

如果无法更改列定义,可以使用substring函数剪切哈希:

       + "WHERE username = ? and password = substr(md5(?), 1, 20) and ID = ?";

您的密码字段对于MD5哈希值来说太短。它应该有至少32个字符的空间,但看起来您已经定义了最多20个字符

将md5test1的输出与表中的值进行比较:

5a105e8b9d40e1329780d62ea2265d8a
5a105e8b9d40e1329780
由于哈希值不相等,因此拒绝登录

如果无法更改列定义,可以使用substring函数剪切哈希:

       + "WHERE username = ? and password = substr(md5(?), 1, 20) and ID = ?";

您的弹出消息是什么?@SotiriosDelimanolis It’s just JOptionPane.details错误/与系统记录不匹配或多或少类似于此,则您的数据库中没有此类用户。插入用户时,是否使用md5散列密码?@Maciej您确定criminalrecords表中有匹配的ID吗?@SotiriosDelimanolis此类用户确实存在。我做这件事的方式就是在表中键入他的用户名和密码,其中密码设置为函数MD5,它会自动散列密码弹出消息是什么?@SotiriosDelimanolis its just JOptionPane。详细信息错误/与系统记录不匹配或多或少类似于此,那么您的数据库中就没有这样的用户。插入用户时,是否使用md5散列密码?@Maciej您确定criminalrecords表中有匹配的ID吗?@SotiriosDelimanolis此类用户确实存在。我这样做的方式就是在表中输入他的用户名和密码,其中密码设置为函数MD5,它会自动散列密码哦,是的,真的!因为MD5是32个字符,我忘了我已经为密码设置了最多20个字符。现在一切都解决了,我刚刚编辑了def列:谢谢你指出我犯的这个小错误。你的答案很简单,而且有效。我也有同样的问题哦,是的,真的!因为MD5是32个字符,我忘了我已经为密码设置了最多20个字符。现在一切都解决了,我刚刚编辑了def列:谢谢你指点我,我犯了一个小错误。你的答案很简单,而且有效。我也有同样的问题