2013-03-22 18 views
1

我有一個需要用戶名,密碼和ID的登錄系統。數據庫中的密碼以MD5格式加密。我的測試密碼是test1,加密後是5a105e8b9d40e1329780。登錄屏幕上的用戶應該輸入test1作爲密碼並允許進入系統。我只是不斷收到我的消息。Java中的SQL。選擇密碼(md5)問題。 rs不執行查詢,拋出異常

我的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'; 
+0

什麼是你蹦出來的消息? – 2013-03-22 15:17:42

+0

@SotiriosDelimanolis它只是JOptionPane。「細節錯誤/不匹配系統記錄」或多或少像這樣 – 2013-03-22 15:18:39

+0

然後,你的數據庫中沒有這樣的用戶。當你插入用戶時,你是否使用md5來散列密碼? – 2013-03-22 15:19:13

回答

4

您的密碼字段是太短了MD5哈希值。它應該有至少32個字符的空間,但它看起來像你已經定義了最多20個字符。

從比較MD5(TEST1)的輸出和值從表中:

5a105e8b9d40e1329780d62ea2265d8a 
5a105e8b9d40e1329780 

由於哈希值不相等,則登錄被拒絕。

如果您不能更改列定義可以切哈希與substring功能:

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

哦,是的真的!因爲md5s是32chars,我忘了我已經設置了最多20chars的密碼。所以它現在都解決了我只編輯了列def :)謝謝你指點我這個小錯誤我已經做出了 – 2013-03-22 16:24:21

+0

你的答案很簡單,它工作我有同樣的問題 – humphrey 2017-11-03 13:20:37