java - 无法获取所需的 JDBC 异常

标签 java jdbc exception

我使用 java servlet 和 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 决定根据返回的 boolean 类型来引导或限制对应用程序的访问。

PS:javaWeb的新学习者。

最佳答案

并且是 SQL 学习者,对吧?因为没有异常(exception),如果数据库表中没有这样的行。该查询仅返回空的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;
}

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

关于java - 无法获取所需的 JDBC 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32097771/

相关文章:

java - 在java中复制模型对象

c# - 在 XML 异常处理期间,如何获取导致异常的 XML 文件中的行号?

python - Tweepy 连接中断 : IncompleteRead - best way to handle exception? 或者,线程可以帮助避免吗?

java - java中 "It is impossible to recover from errors"是什么意思?

java - 使用正则表达式将字符串与 JSON 字符串进行匹配

java - Android 模块访问修饰符 - 是否可以使方法只能在 android studio 库模块中访问?

java - 按位运算是否比 Java 中的模/余数运算符快?

java.sql.Timestamp 到微秒(长整型,精确到微秒)

java - JDBC,将从查询中获得的多个记录插入到其他表中

mysql - 无法立即从 MySQL 中看到插入的数据