Java 无法使登录应用程序正常工作
由于某种原因,此方法总是返回false。我已输入正确的凭据,并尝试返回false,但没有返回给来电者。请帮忙Java 无法使登录应用程序正常工作,java,jdbc,Java,Jdbc,由于某种原因,此方法总是返回false。我已输入正确的凭据,并尝试返回false,但没有返回给来电者。请帮忙 public Boolean validate(String username, String password) { System.out.println(username); System.out.println(password); try { Class.forName("com.mysql.jdbc.Driver");
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;
}
}
PreparedStatement
的参数索引从1
开始,而不是0
。设置参数的正确方法是:
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1, username);
pst.setString(2, password);
我还建议对
可关闭的资源使用try-with-resources块,例如连接或准备语句。或者,如果您使用的是Java Previor 7,至少要在finally块中关闭它们。根代码的情况是,您的代码总是进入catch块并返回false
您应该为PreparedStatement
clasure使用正确的索引第一个值应该是1而不是0
注意:您还应该以正确的方式处理异常
(至少在控制台中打印错误消息,这将是非常有用的)此外,请在catch块中添加system.out.println(e)以获取实际错误。根据你的代码,无论你得到什么错误,它都会返回为false,并且不会指出错误是的,我会这样做,谢谢!