这是我创建的异常
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。在编码时,我从未如此困惑。感谢您的帮助
答案 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
。