我不知道为什么......我抛出了 2 个异常,但我无法捕捉到它们。
在一个库中,我有这段代码会引发 2 种不同的异常。
try {
statement = con.prepareStatement(query);
if (statement.executeUpdate() != 1) {
throw new InvalidIndexException("Record not found or not modified", query);
}
} catch (SQLException e) {
throw new DatabaseIOException(e, "", "SQL Error", logQuery);
}
修改查询以触发 SQL 错误。当它发生时,我有一个日志条目:
2013-04-26 12:19:39 class database.DatabaseIOException
userManagement.Login.setActivationFlag(Login.java:473)
-> SQL Error
[QUERY]: UPDATE login SET activationprTTTTocess='false' WHERE id=235423432
[MSG]: ERROR: column "activationprttttocess" of relation "login" does not exis
所以我确定 sqlerror 已被捕获并重新抛出为DatabaseIOException,我也使用 Netbeans 在调试模式下跟踪代码执行。现在一切正常。
现在我有一个 servlet,我尝试在其中激活用户:
try{
Login.setActivationFlag(235423432, false);
} catch (DatabaseIOException db) {
Log.addItem(db.getMessage());
} catch (InvalidIndexException ed){
Log.addItem(ed.getMessage());
}
Wathewer 我尝试没有办法进入任何 catch 块。执行Login.setActivationFlag行时,错误会出现在日志中(如上所示),但会跳过 catch 块,就像没有附加任何内容一样。
我无法弄清楚为什么会出现这种奇怪的行为。自 3 年以来,我一直在使用这些异常,没有任何问题......这段代码一定有一些非常愚蠢的东西,我看不到......