3

考虑以下代码

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

4

3 回答 3

7

当 Statement 对象关闭时,其当前的 ResultSet 对象(如果存在)也将关闭。

表明 Oracle 可能有问题,您可能必须显式关闭ResultSet. 但同样,根据 Javadocs,这应该不是问题。因此,警告,也许。

于 2012-05-15T13:56:05.420 回答
3

您不能指望 ResultSet 会自动关闭,这取决于驱动程序的实现以及它的合规程度。最好的策略是明确关闭 ResultSet。

于 2012-05-15T13:57:25.057 回答
1

当您关闭语句或连接时,默认情况下它的所有子项也应该关闭。

于 2012-05-15T13:54:37.493 回答