CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  Web 开发

关于stmt.close(); 后stmt = null;的问题???(心情不好--送分)

楼主otom3(潇雨寒)2003-07-03 23:26:47 在 Java / Web 开发 提问

最近看了些资料,说一个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

相关问题

  • 心情不好~
  • 心情不好 心情不好
  • 我心情不好,
  • 偶心情不好:(
  • 心情不好呀
  • 我的心情更不好。
  • 心情不好,送分
  • 心情不好,唉,惨..............................
  • 心情不好,散分!
  • 心情不好,怎么办?

关键词

  • 垃圾
  • null
  • stmt
  • 回收
  • close
  • 垃圾回收
  • 资源
  • 对象
  • 释放
  • 关闭

得分解答快速导航

  • 帖主:otom3
  • pleonheart
  • javabandit
  • chenggn
  • hesi726
  • javabandit
  • moumouren
  • hxzhappy
  • shoulder2001
  • ldianfeng
  • hesi726

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo