gpt4 book ai didi

java - 确保在抛出异常时关闭对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:53:07 26 4
gpt4 key购买 nike

我正在创建 JDBC StatementResultSet

Findbugs 正确地指出,如果抛出异常,我不会关闭这些。

所以现在我有:

Statement stmt = null;
ResultSet res = null;
try {
stmt = ...
res = stmt.executeQuery(...);
...
} finally {
try {
if(res != null)
res.close(); // <-- can throw SQLException
} finally {
if(stmt != null)
stmt.close();
}
}

(只是我有更多的结果集和prepared statements等等open...所以我的finally嵌套比较深)

必须有更好的方法来确保关闭大量结果集吗?

(另外:在 Symbian 中,他们从不让 destructors/close/release/remove 类型的方法抛出任何错误。我认为这是一个非常好的设计决策。JDBC 中的所有 close 方法都可以抛出在我看来,SQLException 让事情变得不必要的复杂。)

最佳答案

如果您使用的是 Java 7,那么您可以利用 ResultSet 这一事实延伸AutoCloseable并使用 try-with-resources声明。

try (Statement sql = <WHATEVER>;
ResultsSet res = sql.executeQuery(<WHATEVER>)) {
// Use results
}

至少这样你就避免了 finally 子句。

关于java - 确保在抛出异常时关闭对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16522469/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com