本帖最后由 asbeforelong 于 2010-09-06 22:52:43 编辑

解决方案 »

  1.   

    需要显示关闭。先从内到外关。ResultSet 先关,再关PreparedStatement ,再关 Connection 
      

  2.   


    帮助文档里面有这两个注释:注:当生成 ResultSet 对象的 Statement 对象关闭、重新执行或用来从多个结果的序列获取下一个结果时,该 Statement 对象将自动关闭 ResultSet 对象。 注:关闭 Statement 对象时,还将同时关闭其当前的 ResultSet 对象(如果有)。 
    看起来只要调用Statement的close方法就可以了吧。
      

  3.   

    肯定的,因为要释放资源!这些链接资源不受JVM的控制,如果不显示关闭的,就会浪费系统资源!
      

  4.   

    不可以只关闭最外层,是ResultSet 先关,再关PreparedStatement ,再关 Connection 
    只关闭Connection的时候 如果ResultSet 关闭的时候出现了异常,我们就捕获不到了。finally{
    try{
     if (rs!=null)(
      rs.close();
    }catch(Exception e){}
    try{
     if (pst!=null)(
      pst.close();
    }catch(Exception e){}
    try{
     if (conn!=null)(
      conn.close();
    }catch(Exception e){}
    }
      

  5.   

    应该显式地关闭,期望由 statement.close 或 connection.close 隐含地关闭的话,会推迟 result.close(),使得 resultset 的并发使用量增加,用户多的时候影响性能。你用这样的试验体验一下:Statement stmt = ...;for(int i = 0; i < 10000; i++){
       ResultSet rs = stmt.executeQuery("select 1 from dual");
    }stmt.close();