由于需求要在hibernate中使用connection,代码大致如下:
getHibernateTemplate().execute(new HibernateCallback(){
public Object doInHibernate(Session session)throws SQLException{
Connection conn = session.connection();
PreparedStatement statement ///
ResultSet rs ///
用完以后Connection不能关闭,那statement和rs需要关闭吗?
Statement对象将由Java垃圾收集程序自动关闭。而作为一种好的编程风格,应在不需要Statement对象时显式地关闭它们。这将立即释放DBMS资源,有助于避免潜在的内存问题。
ResultSet维护指向其当前数据行的光标。每调用一次next方法,光标向下移动一行。最初它位于第一行之前,因此第一次调用next将把光标置于第一行上,使它成为当前行。随着每次调用next导致光标向下移动一行,按照从上至下的次序获取ResultSet行,在ResultSet对象或其父辈Statement对象关闭之前,光标一直保持有效。
不关闭会一直占用服务器资源,直到gc来回收它.所以如果用户过多,占用的资源就会非常大,服务器很可能死掉.
应该是要关闭,
因为这是你自己新建的对像出来,
connection是从HIBERNATE里拿的,
虽然现在CONNECTION在关闭时,会自动将resultset等关闭,
但是如果不自己关闭这些创建的,对系统的性能产生一定影响.
在****处如果不对rs, ps close,就会有java虚拟机out of memory.
按理说java虚拟机会自动垃圾回收,但为什么这里会这样呢?
原因是rs, ps没有关闭,java虚拟机认为它还在被使用。很多循环以后,就内存满了。
Connection不能关闭,那statement和rs当然是需要关闭的