我觉得很难......
我在.jsp中写了一个小例程。最后,ResultSet
,Statement
和Connection
需要关闭。我还在finally { }
中写了结束代码,但是当页面运行时,它返回错误,我没有捕获异常......
我读了一些论坛。其他人在finally { }
任何提示?
答案 0 :(得分:3)
您必须在代码finally
块中捕获异常。因为您必须在catch
块中捕获异常。嵌套的try/catch
es是常规的东西(尽管很丑陋)。
这里的一个重要注意事项是,您可以获得在方法的throws
子句中最终声明的异常。然而,这将导致最终覆盖原始异常的异常,原始异常将丢失。例如,您会看到NullPointerException
,而不是FileNotFoundException
。
顺便说一下,避免在JSP文件中使用代码。将它放在servlet中。
答案 1 :(得分:3)
听起来你有一个老问题,需要在finally块中关闭()但close()会抛出异常本身。尝试类似以下的内容......
ResultSet rs;
try {
// do various stuff
rs = ...;
} finally {
try {
if (rs != null) rs.close();
} catch (SQLException e) {
// do something with exception
}
}
答案 2 :(得分:2)
终于{}没有做任何异常捕获。存在finally {}块以确保运行某些代码,无论try {}块是否达到其自然结束,或者它是否暂时跳转到finally {},因为发生了异常并且最后{}块是沿着办法。但是在终于{}完成之后,例外就是它的快乐业务,它在堆栈中飙升并且高兴地崩溃你的程序。
如果要实际捕获异常并阻止它进一步展开堆栈,请使用catch(){}。但是不要盲目地使用catch - 捕获异常,你实际上并不知道如何恢复比崩溃更糟糕,因为现在你的程序运行不正常并且没有异常堆栈跟踪告诉你原因。
您的ResultSet,Statement和Connection几乎肯定会被关闭。然后,异常继续发生并且无论如何都会破坏您的程序,因为这与您的ResultSet,Statement和Connection无关。
实际的例外是什么?
答案 3 :(得分:2)
也许我已经老了,但是在catch
区块中捕获异常有什么问题?
答案 4 :(得分:0)
如果您说出try块中的内容,这会有所帮助。你可能没有捕获适当的异常或你的代码终于抛出异常。
最后没有捕获也没关系。
try {
//do some work
}
finally {
//check of state and do clean up. You would have reached here via multiple branches.
}
使用catch捕获特定异常更合适,然后在那里处理特定的清理。最后使用即使发生异常也必须执行的任何代码。
try {
//do some work
}
catch ( RecoverableException1 re1) {
//cleanup
}
catch ( RecoverableException2 re2) {
//cleanup
}
finally {
//check of state and do clean up. You would have reached here via multiple branches.
}
答案 5 :(得分:-1)
最后{ 尝试{ resultSet.close(); } catch(E e){ }最后{ 尝试{ 将statement.close(); } catch(E e){ }最后{ conn.close(); } }
}