2017-07-20 46 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请勿在密码安全区域重新发明爆胎。请。