无法使登录应用程序正常工作

时间:2016-04-03 22:36:06

标签: 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");
        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;
    }
}

2 个答案:

答案 0 :(得分:3)

PreparedStatement的参数索引以1而非0开头。设置参数的正确方法是:

PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1, username);
pst.setString(2, password);

我还建议对CloseableConnectionPreparedStatement资源使用try-with-resources块。或者至少在finally块中关闭它们,如果你使用的是Java之前的版本。

答案 1 :(得分:0)

根本情况是你的代码总是进入catch块并返回false

您应该为PreparedStatement clasure使用正确的索引。 fisrt one应为1而不是0

注意:您还应该以正确的方式处理Exceptions(至少在控制台中打印错误消息,这将有所帮助)