我可不可以不关st和rs,而直接关闭conn

解决方案 »

  1.   

    我不明白的是如果你不关闭st和rs,下一次循环如何用st和rs 呢?它们不都已经被打开了吗
      

  2.   

    java是自动垃圾回收机制,除了是多线程,其他都会自动销毁,你显试关闭也未尝不可,但你关闭了就要重新打开
      

  3.   

    我不明白的是如果你不关闭st和rs,下一次循环如何用st和rs 呢?它们不都已经被打开了吗
    ------------------------------
    像caimaohua(杨白劳)所说,也有道理,但是不完全,
    java虽然有垃圾回收机制,但是它的工作确实不确定的,也就是说,我们也不知道什么时候开始回收资源,除非强制性的启动垃圾回收器。不过你的这个问题
    不用关闭,当你第二次用的时候,就给他们赋了新的内容!
    覆盖了以前的内容。
      

  4.   

    必须要关闭,虽然你最后循环结束之后一个conn.close()可以关闭所有你刚才打开的statement/resultset
    但是,如果你的循环很大,还没有来得及conn.close之前,你的resultset太多就会导致数据库达到client cursor max值,光标会被你干光的。如果你循环只有3-5次,或者不是一个循环,你只打开了两三个statement/resultset,那么就没有太大关系。这里,你的循环谁知道多大,一定要关!这个和VM的gc没有关系,数据库连接这个不单单是内存资源,需要手工关闭的。
      

  5.   

    恩,好象的确如 DanielYWoo(绿色毒汁) 所说,我如果不用
                    if(rs != null) rs.close();
                    if(st != null) st.close();
    测试300次都会死掉.还有就是“一个conn只能打开一个st,一个st只能打开一个rs”的意思是不是指一次只能打开一个
      

  6.   

    还有就是“一个conn只能打开一个st,一个st只能打开一个rs”的意思是不是指一次只能打开一个
    ------------
    一个conn可以打开多个st,但是一个st最多只能对应一个rs
    相当于conn下开多个client cursor
      

  7.   

    测试300次都会死掉.
    ------------------
    可能你的数据库max cursor设置是300左右