Java-未捕获到异常

时间:2019-12-22 16:06:43

标签: java exception try-catch

这是我创建的异常

public class UserNaoExiste extends Exception {

    public UserNaoExiste(){
        super("User não existe");
    }

}

这是抛出异常的函数(我相信实际上是抛出异常)

public Entidades.User getUser(String username) throws Exceptions.UserNaoExiste {
        Entidades.User u = null;
        try (Connection con = DriverManager.getConnection(this.url, this.username, this.password)) {
            PreparedStatement stm = con.prepareStatement("SELECT * FROM user WHERE username = ?");
            stm.setString(1, username);
            ResultSet rs = stm.executeQuery();
            if (rs.next() == false) {
                throw new Exceptions.UserNaoExiste();
            }
            u = new Entidades.User(rs.getString("Username"), rs.getString("Password"), rs.getString("Nick"), rs.getString("Admin"));
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }

        return u;
    }

应该在这里捕获异常

private String login(String username, String password) {
        Entidades.User u = null;
        String r = "s";
        try {
            u = udao.getUser(username);
            System.out.println("olaola");
        } catch (Exception e) {
            r = "n";
        }

        System.out.println(r);
        System.out.flush();

        if (r.equals("s") && u.checkPassword(password)) {
            this.user = u;
            this.auth = (u.isAdmin() ? 2 : 1);
        } else {
            r =  "n";
        }
        return r;
    }

实际发生的情况是抛出异常,但很高兴地忽略了该异常,该println执行,r未设置为“ n”,然后它尝试对null执行u.checkPassword。在编码时,我从未如此困惑。感谢您的帮助

1 个答案:

答案 0 :(得分:0)

getUser方法内部,引发了UserNaoExiste异常,并在同一方法内捕获了该异常。

try (Connection con = DriverManager.getConnection(this.url, this.username, this.password)) {
        PreparedStatement stm = con.prepareStatement("SELECT * FROM user WHERE username = ?");
        stm.setString(1, username);
        ResultSet rs = stm.executeQuery();
        if (rs.next() == false) {
            throw new Exceptions.UserNaoExiste();
        }
        u = new Entidades.User(rs.getString("Username"), rs.getString("Password"), rs.getString("Nick"), rs.getString("Admin"));
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }

login方法中,catch语句将永远不会执行,因为getUser引发的异常已被该getUser方法捕获。

您可以在数据库SQLException中捕获与数据库相关的异常的特定异常Exception,而不是getUser