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

我正在创建JDBC语句和ResultSet. Findbugs正确地指出,如果抛出异常,我不会关闭它们. 所以现在我有: Statement stmt = null;ResultSet res = null;try { stmt = … res = stmt.executeQuery(…); …} finally { try { i

我正在创建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子句.

作者: dawei

【声明】:永州站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐

联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部