2016-04-27 207 views
2

我想用数据库信息验证用户输入。因此,如果用户输入用户名,它将检查是否与数据库匹配。使用数据库进行Java用户名和密码验证

public void login() throws SQLException { 
     boolean loginUsername = false; 
     boolean loginPassword = false; 
     String input = null; 

     while(input == null) { 
      System.out.println(message.loginUsername()); 
      input = in.nextLine(); 

      try { 
       preparedStatement = connect.prepareStatement("SELECT username FROM doom.accounts;"); 
       rs = preparedStatement.executeQuery(); 

       while(rs.next()) { 
        String username = rs.getString("username"); 

        if(!input.equals(username)) { 
         System.out.println(message.invalidUsername()); 
         input = null; 
        } else { 
         loginUsername = true; 
        } 
       } 
      } catch(SQLException e) { 

      } finally { 
       if(statement != null) { 
        statement.close(); 
       } 
      } 
     } 
} 

我只发布了方法的用户名部分。我已经调试过,并且可以确认我的用户输入确实等于数据库中的有效用户名,但是当它不应该时,我仍然收到无效的用户名消息。

+6

由于您使用的是数据库,为什么不让数据库在您的SQL语句中使用'where'子句在正确的用户名中查找表中的行?它效率更高。 – hexafraction

+0

heed @ hexafraction的建议。非常没有效率的方式。 – JJF

+0

数据库中的列名可能会返回为'USERNAME'而不是'username',因此请尝试使用rs.getString(“USERNAME”)或rs.getString(1)'。并使用像@hexafraction这样的where子句说。 – GriffeyDog

回答

2

通过编写SQL查询以及在字符串中执行equals检查时确定它们是否在字符串中相同。如果案件不重要,您可以使用equalsIgnoreCase()

更好的方法将是您的查询改成这样:

select username from doom.accounts where username like ? 

记住要离开了“;”

看看PreparedStatement和在?

设置的用户名,您可以看看here