我有这样的代码:
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将确保在所有情况下都能正确关闭这些资源。
答案 0 :(得分:3)
您的ResultSet和PreparedStatement在您正确陈述时受到保护。
如果您的Connection在相关范围内也得到了适当的处理,那么是的,这是误报。
答案 1 :(得分:0)
所讨论的场景肯定是假阳性。
Spotbug(从3.1.5版开始)存在多个问题:
AutoCloseable
对象由SpotBugs报告(误报):
还有一个与ResultSet
和Statement
特别相关的问题(“隐式关闭语句会关闭从中获得的结果集”):