SpotBugs是否因未关闭资源而报告误报?

时间:2017-12-12 16:02:23

标签: java try-with-resources spotbugs

我有这样的代码:

public static MyObject forId(long myObjectId, Connection cxn) throws SQLException {
    try (PreparedStatement stmt = cxn.prepareStatement(selectMyObjectById))) {
        stmt.setLong(1, myObjectId);
        try (ResultSet res = stmt.executeQuery()) {
            res.next();
            return MyObject.fromResultSet(res);
        }
    }
}

哪个SpotBugs为JDBC Statement对象标识为OBL_UNSATISFIED_OBLIGATION。这是误报吗?我的印象是,try-with-resources将确保在所有情况下都能正确关闭这些资源。

2 个答案:

答案 0 :(得分:3)

您的ResultSet和PreparedStatement在您正确陈述时受到保护。

如果您的Connection在相关范围内也得到了适当的处理,那么是的,这是误报。

答案 1 :(得分:0)

所讨论的场景肯定是假阳性。

Spotbug(从3.1.5版开始)存在多个问题:

    尝试资源中使用的
  1. AutoCloseable对象由SpotBugs报告(误报):

  2. 还有一个与ResultSetStatement特别相关的问题(“隐式关闭语句会关闭从中获得的结果集”):