Sonarqube 误报“使用 try-with-resources 或在“finally”子句中关闭此“ResultSet””

pab*_*blo 2 java false-positive sonarqube

Sonarqube 一直用这个问题标记代码,在我看来,这是一个误报。代码如下所示:

try(PreparedStatement st=con.prepareStatement(myQuery)){
    st.setInt(1, myValue);
    ...
    ResultSet rs = st.executeQuery();
    ...
}
Run Code Online (Sandbox Code Playgroud)

如果我没记错的话,PreparedStatement 实现了 Closeable,并且在关闭自身时,它也会关闭底层的 ResultSet。

这种行为会阻止 ResultSet 保持打开状态,但 Sonarqube 分析将其标记为严重错误。

我错了吗?在这种情况下,有什么方法可以让 Sonarqube 忽略这条规则?

在 Sonarqube 6.7.3 和 JDK 8 下测试。

ResultSetjavadoc:

当生成它的 Statement 对象关闭、重新执行或用于从多个结果的序列中检索下一个结果时,ResultSet 对象将自动关闭。

Tib*_*ssy 5

事实上,这是一个误报。它已经被报道并且有修复它的公开票https://jira.sonarsource.com/browse/SONARJAVA-2060

您可以在 SonarQube UI 中将问题标记为误报,或// NOSONAR在提出问题的行添加评论以忽略它。