java - 即使我关闭 RS,结果集资源也会泄漏?

标签 java resultset try-catch-finally resource-leak

在我使用 rsHP = stmt.executeQuery(query); 的任何地方,都会收到“资源泄漏:‘rsHP’在此位置未关闭”的信息

这是此方法的基本布局...

public static void method(String x, Connection conn){
Statement stmtHP = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_UPDATABLE);
ResultSet rsHP = null;

try{
      ----ALGORITHM IN HERE------
      ****This is the general form of this method*****

      queryHP = "select * from SOMETABLE where SOMETHING = 'blah'";
      rsHP = stmtHP.executeQuery(queryHP);

      while(rsHP.next()){
            List.add(rsHP.getString("COLNAME"));
      }  
            .
            .
        repeats for 8 different queries
            .
            .   
      queryHP = "select * from SOMEOTHERTABLE where SOMETHINGELSE = 'blah2'";
      rsHP = stmtHP.executeQuery(queryHP);

      while(rsHP.next()){
            List.add(rsHP.getString("NEWCOLNAME"));
      } 

}catch(Exception e){
       System.out.println("Hey dumbo you suck, Exception Found");
       rsHP.close();
       stmtHP.close();
       conn.close();
}finally{
       rsHP.close();
       stmtHP.close();
       // connection gets closed later if no exceptions thrown
}

}// end method

最后,我显然要关闭我所有的东西。如果我的方法实际上不可能在抛出错误之外不关闭 RS 的情况下终止,我对如何发生内存泄漏感到困惑。

最佳答案

Connection#createStatement() 抛出 SQLException,因此此代码根本无法编译。

我建议你将方法的签名更改为

public static void method(String x, Connection conn) throws SQLException
<小时/>

对于资源泄漏,我想使用以下逻辑会对您有所帮助

try{
    // code
    rsHP.close();
    conn.close();
}catch(Exception e){
    // StackTrace
}finally{
    if (rsHP != null) rsHP.close();
    if (conn != null) conn.close();
}

关于java - 即使我关闭 RS,结果集资源也会泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38154816/

相关文章:

java - 使用java按指定顺序排列arrayList的值

java - java中的递归方法遇到问题

java - 如何在java中生成从0000到9999的4位随机数

java - 将结果集值放入 Collection 对象,然后添加到 ArrayList

java - 最后关闭连接后如何处理返回结果集值(错误处理)?

Java 未处理异常消失

c# - 如何检测 Excel 工作簿是否关闭(在 C# 中使用 Interop)?

java - HYBRIS - 组件和插槽如何在 JSP 文件中工作?

Javafx mysql,如何一一获取行

java - finally block 中的代码和 finally block 之后的代码有什么区别?