加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如果抛出异常,确保关闭对象

发布时间:2020-12-14 16:23:41 所属栏目:Java 来源:网络整理
导读:我正在创建JDBC语句和ResultSet. Findbugs正确地指出,如果抛出异常,我不会关闭它们. 所以现在我有: Statement stmt = null;ResultSet res = null;try { stmt = ... res = stmt.executeQuery(...); ...} finally { try { if(res != null) res.close(); // --
我正在创建JDBC语句和ResultSet.

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();
    }
}

(只有我有更多的结果集和准备好的陈述等等……所以我的最后一个嵌套是相当深的)

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

(旁白:在Symbian中,他们永远不会让析构函数/ close / release / remove -type方法抛出任何错误.我认为这是一个非常好的设计决策.在我看来,JDBC中所有关闭的方法都会抛出SQLException会使事情变得不必要地复杂化. )

解决方法

如果您使用的是Java 7,则可以利用 ResultSet扩展 AutoCloseable的事实并使用 try-with-resources语句.
try (Statement sql = <WHATEVER>;
     ResultsSet res = sql.executeQuery(<WHATEVER>)) {
     // Use results
}

至少那你避免了finally子句.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读