我有以下代码
Result rs = null;
PreparedStatement ps = null;
try{
rs = <some result set>
ps = <some preparedStatement>
//using rs and ps before end of try block
} catch {
//log exceptions
} finally {
try{
if(rs != null) rs.close(); // (1) SonarCube detects this close() and doesn't raise any issues.
} catch {
//ignore
} finally {
rs = null;
}
try{
if(ps != null) ps.close(); //(2) This close() is NOT detected by SonarCube and it complains.
} catch {
//ignore
} finally {
ps = null;
}
}
所以我的问题是与ResultSet相比,PreparedStatement有什么不同。两者都在实现AutoCloseable接口。两者都以相同的模式关闭。
请不要建议尝试使用资源作为解决方案。我的代码中有很多地方会发生这种情况,因此更改所有这些地方是不切实际的。
谢谢。