在下面的java类中,我正在使用一个方法进行身份验证,其中我使用resultSet.next()
方法来检查数据库中是否存在给定的userName和密码,但它甚至返回false当给定的userName和密码存在于数据库中时。
public boolean authenticate(String userName,String password){
//db connection code
try {
String query = "select user_name from registeredUser where user_name= ? AND password = ?";
pstmt = conn.prepareStatement(query);
pstmt.setString(1, userName);
pstmt.setString(2, password);
rs = pstmt.executeQuery();
if(rs.next()) {
System.out.println("True");
return true;
}
else return false;
} catch (Exception e) {
e.printStackTrace();
return False;
} finally {
try {
rs.close();
pstmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:2)
根据您的基础DBMS,您可能会遇到用户名和密码问题。
对于大多数DBMS,MySecretPassword
的值不同于mysecretpassword
。
因此,如果您的DBMS 区分大小写并且用户未输入用户名和密码完全,则存储在数据库中的用户名和密码很可能是SELECT什么都不返回。
答案 1 :(得分:0)
尝试下一个代码:
public boolean authenticate(String userName,String password){
//db connection code
try {
String query = "select count(*) from registeredUser where user_name= ? AND password = ?";
pstmt = conn.prepareStatement(query);
pstmt.setString(1, userName);
pstmt.setString(2, password);
rs = pstmt.executeQuery();
rs.next();
int count = rs.getInt(1);
if(count != 0) {
System.out.println("True");
return true;
}
else return false;
} catch (Exception e) {
e.printStackTrace();
return False;
} finally {
try {
rs.close();
pstmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
答案 2 :(得分:0)
在对OP的评论中,您说“我在db。userName中有以下值:usman,密码:2”但您的代码说用户名字段名为“user_name”。
userName!= user_name