2017-07-20 78 views
0

我正在創建非常簡單的ATM機。我有MySQL的數據庫像列:loginID,密碼,錢。我想改變我的方法,可以在開始時驗證登錄名和密碼的正確性(並在此之後做一些事情)。因此,如果用戶名和密碼是正確的,那麼我想收到消息「登錄成功」或登錄失敗」。現在,我一直有消息‘登錄成功’,我怎樣才能改變呢?如何驗證登錄名/密碼的正確性JDBC

public static void post() throws Exception{ 

    Scanner sc = new Scanner(System.in); 
    System.out.println ("please enter user id:"); 
    String userId = sc.nextLine(); 
    System.out.println("please enter password:"); 
    String pass = sc.nextLine(); 
    System.out.println("how much you want to put"); 
    int money = sc.nextInt(); 

    try { 
     Connection con = ConnectionDB.getConnection(); 
     String sql = "UPDATE `BankDB`.`Info` SET `Money`= ? WHERE `ClientID`= ? AND `ClientPass` = ?"; 

     PreparedStatement posted = con.prepareStatement(sql); 
     posted.setInt(1, money); 
     posted.setString(2, userId); 
     posted.setString(3, pass); 


     posted.executeUpdate(); 
     con.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally{ 
     System.out.println("Login was succesful"); 
    } 
} 
+0

無論是否引發異常,finally子句將始終執行。 – FredK

回答

1

如果我理解這個問題是有效的,你需要檢查更新命令是否真的更新了數據庫中的某些內容 在這種情況下,你需要從posted.executeUpdate()得到結果,如果大於零,更新DB中的更新記錄和用戶名/密碼分別爲正確

+0

非常感謝你,這是我想知道的:) – damianm

0

UPDATE即使其WHERE子句中的子句選擇零行,查詢也能正常工作所以您的查詢

UPDATE `BankDB`.`Info` SET `Money`= ? WHERE `ClientID`= ? AND `ClientPass` = ? 

如果WHERE子句的任何一部分都不匹配,則不執行任何操作。但它仍然成功。

一般來說,你想要做一些像這個大綱所示的東西。

  1. SELECT id, password FROM Info WHERE ClientId = ?
  2. 與您的網絡用戶提供的一個匹配檢查密碼。如果不匹配,請拒絕交易。
  3. UPDATE Info SET Money = Money + ? WHERE id = ?給出您在第一步中檢索到的id值。

危險您確認用戶密碼的方式與網絡犯罪分子出沒的世界令人難以置信的危險。將純文本密碼存儲在dbms中對於您在安全性方面可能做的最糟糕的事情而臭名昭着。這是關於密碼散列在PHP中,但其建議適用於任何語言。請閱讀。 http://php.net/manual/en/faq.passwords.php請勿在密碼安全區域重新發明爆胎。請。