日期:2014-05-18  浏览次数:21676 次

PreparedStatement使用两次,需要两次close()吗
例如
PreparedStatement pstmt = null;
sql=select * from user;
pstmt=connection.prepareStatement(sql);
pstmt.executeQuery();

psmt.close()//这里需不需要也关闭一次?

sql2=select * from titles;
pstmt=connection.prepareStatement(sql);
pstmt.executeQuery();

psmt.close()//这里关闭一次

PreparedStatement使用两次,需要两次close()吗,希望说说理由

------解决方案--------------------
需要

因为执行一次产生一个游标,不关会游标累加。


------解决方案--------------------
引用:
关闭PreparedStatement 对象是让服务器好重新分配数据库连接,不让当前程序一直占用,而你下面接下来又进行了查询,所以不需要关闭。


差矣。connection才是连接,
PreparedStatement 是预编译sql的statement.
connection.prepareStatement(sql)只是创建一个 PreparedStatement 对象.调用2次,会创建2个对象
和Connection一样,如果不调用close方法,系统在垃圾回收的时候也会自动的给你关闭。


psmt.close()//这里需不需要也关闭一次?

我的建议是这里一定要关闭。调用它以后,会释放PreparedStatement 所占用的数据库和jdbc的资源。

你这种写法,本来就不正确。一个连接里面一般都是只做一次sql操作。要么就分开,重新开辟一个连接。


------解决方案--------------------
不需要关闭2次。
首先纠正楼上的,pstmt是同一个对象,不会被垃圾回收。
其次,pstmt可以放在finally里面关闭。
哪怕抛出异常也可以关闭释放资源