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 对象将自动关闭。
事实上,这是一个误报。它已经被报道并且有修复它的公开票https://jira.sonarsource.com/browse/SONARJAVA-2060
您可以在 SonarQube UI 中将问题标记为误报,或// NOSONAR在提出问题的行添加评论以忽略它。