由于某种原因,此方法始终返回false。我已输入正确的凭据并尝试但是返回false来调用者。请帮忙。
public Boolean validate(String username, String password) {
System.out.println(username);
System.out.println(password);
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/login?"+"user=Naveen&password=Naveen");
String sql = "select * from login.user where username=? and password=?";
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(0, username);
pst.setString(1, password);
ResultSet rs = pst.executeQuery();
if(rs.next()){
return true;
}else{
return false;
}
} catch (Exception e) {
return false;
}
}
答案 0 :(得分:3)
PreparedStatement
的参数索引以1
而非0
开头。设置参数的正确方法是:
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1, username);
pst.setString(2, password);
我还建议对Closeable
或Connection
等PreparedStatement
资源使用try-with-resources块。或者至少在finally块中关闭它们,如果你使用的是Java之前的版本。
答案 1 :(得分:0)
根本情况是你的代码总是进入catch块并返回false
。
您应该为PreparedStatement
clasure使用正确的索引。 fisrt one应为1而不是0 。
注意:您还应该以正确的方式处理Exceptions
(至少在控制台中打印错误消息,这将有所帮助)