关于stmt.close(); 后stmt = null;的问题???(心情不好--送分)
最近看了些资料,说一个Statement 对象关闭以后(stmt.close();)!不能用stmt=null;而另一些资料则用了这个语句,不知道各位朋友有什么看法?? 问题点数:100、回复次数:19Top
1 楼pleonheart(只睡六小时)回复于 2003-07-03 23:30:11 得分 10
stmt.close();后用stmt = null;有什么意义吗?Top
2 楼otom3(潇雨寒)回复于 2003-07-03 23:34:55 得分 0
希望大家发表意见!是不是用了stmt=null这个语句后,stmt的内存垃圾就永远不能回收了?Top
3 楼javabandit(bandit)回复于 2003-07-03 23:43:07 得分 10
stmt=null和stmt.close()是两回事,前者是将对象的指针赋于了null,而后者是将对象关闭,但它还是存在。并且在程序里建议还是显示的用close方法更好控制一些!Top
4 楼otom3(潇雨寒)回复于 2003-07-03 23:48:11 得分 0
谢谢楼上的,我是想知道在stmt.close();后还有必要用stmt=null;吗?或是说用了stmt=null;有什么好处和坏处?Top
5 楼chenggn(chenggn)回复于 2003-07-04 00:07:00 得分 10
stmt.close 之后可能就变成 null了
null了 垃圾回收 就知道不可能再用了 如果需要会回收内存 不过 资源还是要 close 关闭的
我是这样想的。。
Top
6 楼hesi726(hesi)回复于 2003-07-04 00:48:41 得分 10
stmt.close(); 释放资源啊!
stmt = null;
表示 stmt 已经是一个空对象,当垃圾回收器发现时可以回收 stmt 占用的资源啊!
一起用绝对不会出错的!Top
7 楼javabandit(bandit)回复于 2003-07-04 01:02:56 得分 20
用了close后没有必要用null了,因close已经将资源释放了,只对象没有回收而已,需要垃圾回收来做。
用stmt==null作用不是很明显,对于PrepareStatement来说这个并没有作用,对Statement会有作用!Top
8 楼otom3(潇雨寒)回复于 2003-07-04 08:58:36 得分 0
谢谢朋友们的关心!还有什么不同意见吗?我要结贴了哦!!Top
9 楼moumouren(某某人)回复于 2003-07-04 09:17:02 得分 20
up,stmt==null没有价值
{
Statement stmt = .....
stmt.close();
}//这个打括号结束是就表示,stmt可以回收了
但stmt.close()还是有必要的,它要释放某些资源
Top
10 楼kongxiangli(笑看红尘)回复于 2003-07-04 09:27:47 得分 0
upTop
11 楼amortal(7086)回复于 2003-07-04 09:35:58 得分 0
同意!Top
12 楼conning333(chen)回复于 2003-07-04 10:12:51 得分 0
close就可以了,没有必要=nullTop
13 楼poyer(瑞德)回复于 2003-07-04 10:17:10 得分 0
疑问:
对于 moumouren(某某人) 中说的
}//这个打括号结束是就表示,stmt可以回收了
不是很认可。
垃圾收集器只是在它说占有的空间满或者到一定的周期时才会进行一次回收的。
Top
14 楼hxzhappy(冰雨)回复于 2003-07-04 10:20:49 得分 5
何必那么麻烦呢,我一般这样处理
public static void closeDB(Connection conn, Statement stmt, ResultSet rs) throws
SQLException {
try {
if (rs != null)
rs.close();
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
}
catch (SQLException e) {
}
}Top
15 楼shoulder2001(马儿)回复于 2003-07-04 10:23:36 得分 5
stmt =null //将句柄指向null,原先stmt所指对象于句柄失去关联,等待垃圾机处理
stmt.close()//意思也是释放资源 stmt = null 这个类似功能在函数close()里被执行,close()是一个继承来的函数,隐式的执行了stmt = null.
所以用其一不用其二 随君选择Top
16 楼poyer(瑞德)回复于 2003-07-04 10:25:32 得分 0
楼上的,其实有些情况是不要关闭所有的东西的。
你的只适合于用完连接操作就不会再次使用的情况,不然也太损耗了。Top
17 楼ldianfeng(教授)回复于 2003-07-04 12:52:44 得分 5
stmt=null,因该没有用,sun的例子上没有用的。Top
18 楼otom3(潇雨寒)回复于 2003-07-04 13:27:34 得分 0
谢谢!谢谢!你们让我受益非浅!Top
19 楼hesi726(hesi)回复于 2003-07-05 15:26:13 得分 5
我不认同上面几位的观点!
stmt.close () 会让 stmt=null吗?
答案is no!
大家随便编个程序,跟踪跟踪 stmt .close 后 stmt 是否会被设为 null,就知道了!
答案是肯定不会被设为 null的!
而且,我认为只调用 stmt.close(),stmt所占用的资源不会被垃圾回收器收集的!
大家编个程序跟踪一下就知道了!
至于 stmt=nulll 和 stmt.close 可以随便使用其中之一,那我是绝对不同意的!
肯定 的 stmt.close 是应该调用的!
Top




