无法获得必需的JDBC异常

时间:2015-08-19 14:03:28

标签: java jdbc exception-handling

我使用java servlets和jsp创建了一个登录表单。用户名和密码等登录信息保存在数据库中。 我的问题是,当用户输入我的java类无法在数据库中找到的信息时,我不会得到异常。如果登录数据在Db中不可用,我怎么能创建一个例外?

public boolean loginValidator(String e, String p) throws SQLException {

    String userName = e;
    String password = p;
    boolean validate = false;
    try{
    PreparedStatement ps = connection.prepareStatement("SELECT * FROM user WHERE email = ? and password = ?");
    ps.setString(1, userName);
    ps.setString(2, password);

    ResultSet rst = ps.executeQuery();

    while (rst.next()) {
        validate = (rst.getString("email").equals(userName)) && ((rst.getString("password").equals(password)));
    }}
    catch(SQLException ex){
        System.out.println(ex.getMessage());
        validate = false;
    }


return validate;
}

这实际上是我的java类中的一个方法,它验证并将boolean类型发送到servlet,然后servlet决定根据返回的布尔类型指示或限制对应用程序的访问。

PS:javaWeb的新学习者。

1 个答案:

答案 0 :(得分:1)

是SQL的学习者,对吗?因为没有例外,如果DB表中没有这样的行。查询只返回空ResultSet。所以你必须检查结果集是否为空(然后检查电子邮件和密码 - 但这是恕我直言)。

public boolean loginValidator(String userName, String password) {
    try{
        PreparedStatement ps = connection.prepareStatement("SELECT * FROM user WHERE email = ? and password = ?");
        ps.setString(1, userName);
        ps.setString(2, password);
        ResultSet rst = ps.executeQuery();
        return rst.next(); // whether DB contains such record
    } catch(SQLException ex){
        ex.printStackTrace(); // TIP: use logging
    }
    return false;
}

顺便说一下。我强烈建议您将明文密码存储在数据库中。

相关问题