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

前端之家收集整理的这篇文章主要介绍了java – 如果抛出异常,确保关闭对象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在创建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子句.

猜你在找的Java相关文章