考虑以下代码
ResultSet rs = null;
Statement st = null;
try {
//do somehting
} catch (Exception e){
//do something
} finally {
if(st != null){
try {
st.close();
} catch (SQLException e) {
log.error("Exception while closing statement: " + e);
}
}
}
问题是当我们关闭语句时,它是否会关闭结果集,或者我们是否需要显式关闭结果集
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
log.error("Exception while closing result set: " + e);
}
}
我认为关闭语句会自动关闭结果集,但如果我没有显式关闭结果集,则FindBugs会抛出以下警告
此方法可能无法清除java.sql.ResultSet
答案 0 :(得分:7)
When a Statement object is closed, its current ResultSet object, if one exists, is also closed.
This和this表明Oracle可能存在问题,您可能必须明确关闭ResultSet
。但同样,根据Javadocs,这应该不是问题。因此,警告,也许。
答案 1 :(得分:3)
您不能指望ResultSet自动关闭,它取决于驱动程序的实现以及它的兼容性。最好的策略是显式关闭ResultSet。
答案 2 :(得分:1)
当您关闭语句或连接时,默认情况下也应该关闭它的所有子项。