JDBC中-如果ResultSet-和-Statement-不关闭的话-会有什么影响.doc_第1页
JDBC中-如果ResultSet-和-Statement-不关闭的话-会有什么影响.doc_第2页
JDBC中-如果ResultSet-和-Statement-不关闭的话-会有什么影响.doc_第3页
JDBC中-如果ResultSet-和-Statement-不关闭的话-会有什么影响.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

相关文章: Tomcat连接池原理讨论 hibernate3.2在容器数据源下的游标过多问题 java线程死锁与内存溢出 推荐圈子: D语言 更多相关推荐 感觉上好象是只要把connection给关闭了,系统就能正常运行了。 那在查询或是其实操作中,如果只关闭Connection,不作ResultSet 和 Statement 的关闭的话,对系统性能是否会有影响呢。或者是其实方面的不良影响。 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。 推荐链接 下载免费的 IBM DB2 Express-C 数据库 在繁琐中挣扎还是简化自主管理? 5月份Struts 2.0最新技术专题系列讲座返回顶楼 robbin 等级: 文章: 5840 积分: 2265 来自: 上海 发表时间:2005-01-10 如果你不使用连接池,那么就没有什么问题,一旦Connection关闭,数据库物理连接就被释放,所有相关Java资源也可以被GC回收了。 但是如果你使用连接池,那么请注意,Connection关闭并不是物理关闭,只是归还连接池,所以PreparedStatement和ResultSet都被持有,并且实际占用相关的数据库的游标资源,在这种情况下,只要长期运行,往往就会报“游标超出数据库允许的最大值”的错误,导致程序无法正常访问数据库。 返回顶楼 0 0 请登录后投票 xiaoyu 等级: 文章: 956 积分: 1359 来自: 广东 发表时间:2005-01-10 补充:其实这个要看你用的是什么数据库,然后决定了你的JDBC,然后呢,决定了实现这个JDBC的方法,然后呢就决定了问题。 建议关闭。 返回顶楼 0 0 请登录后投票 sevenbamboos 等级: 文章: 253 积分: 413 来自: 上海 发表时间:2005-01-14 只开不关的话可能会把数据库游标耗光 返回顶楼 0 0 请登录后投票 seantan 等级: 文章: 23 积分: 262 发表时间:2005-01-26 robbin 写道如果你不使用连接池,那么就没有什么问题,一旦Connection关闭,数据库物理连接就被释放,所有相关Java资源也可以被GC回收了。 但是如果你使用连接池,那么请注意,Connection关闭并不是物理关闭,只是归还连接池,所以PreparedStatement和ResultSet都被持有,并且实际占用相关的数据库的游标资源,在这种情况下,只要长期运行,往往就会报“游标超出数据库允许的最大值”的错误,导致程序无法正常访问数据库。不使用连接池的情况下,如果你直接关闭连接话,对应的Statement,ResultSet对象都应该由Driver Vendor来帮你关闭,即由他来进行资源的释放.这个是由JDBC3.0规范中提到的.因为有些数据库资源可能属于GC不能释放的范围. 对于连接池的实现而言,有时间我看看Oracle和Postgres的实现再下定论吧.但是我认为出现上面的情况应该理解成为连接池vendor的一种没有按规范来实现的问题.如果用数据库自己实现的连接池应该不会有这样的情况出现. 返回顶楼 0 0 请登录后投票 nihongye 等级: 文章: 849 积分: 1513 来自: 深圳 发表时间:2005-01-26 weblogic6.x的连接池好像会关. 返回顶楼 0 0 请登录后投票 firebody 等级: 文章: 922 积分: 3075 发表时间:2005-01-26 robbin 写道如果你不使用连接池,那么就没有什么问题,一旦Connection关闭,数据库物理连接就被释放,所有相关Java资源也可以被GC回收了。 但是如果你使用连接池,那么请注意,Connection关闭并不是物理关闭,只是归还连接池,所以PreparedStatement和ResultSet都被持有,并且实际占用相关的数据库的游标资源,在这种情况下,只要长期运行,往往就会报“游标超出数据库允许的最大值”的错误,导致程序无法正常访问数据库。嘿嘿,如果这样的话,那就说明连接池的设计有漏洞了。 返回顶楼 0 0 请登录后投票 sun_wind 等级: 文章: 58 积分: 221 发表时间:2005-02-05 引用如果你不使用连接池,那么就没有什么问题,一旦Connection关闭,数据库物理连接就被释放,所有相关Java资源也可以被GC回收了。 但是如果你使用连接池,那么请注意,Connection关闭并不是物理关闭,只是归还连接池,所以PreparedStatement和ResultSet都被持有,并且实际占用相关的数据库的游标资源,在这种情况下,只要长期运行,往往就会报“游标超出数据库允许的最大值”的错误,导致程序无法正常访问数据库。使用连接池时也应该会关闭PreparedStatement和ResultSet,看过Apache的DBCP,它是会关的,不知道其他连接池是怎么样的。实际上,使用不使用连接池应该对开发者透明,都应该遵循Jdbc规范,从这个角度,连接池如果没有实现关闭功能应该是有问题的。 返回顶楼 0 0 请登录后投票 qilong2000 等级: 文章: 7 积分: 208 发表时间:2005-03-28 这个关不关和使用不使用conn pool没有关系,一般操作是会是这样,线程从外界获取一个conn,然后创建自己地stmt,rs,然后执行逻辑操作,然后将conn返回给pool。 如果程序员忘记手动关地话。当这个线程执行完以后,stmt,rs都成垃圾,当他们被垃圾搜集地时候,gc会替我们把它们给关闭地。这就是很多代码没有关闭,仍然正常运行。 但是这样会有一个潜在地问题。就是gc无法确定什么时候运行。如果free地内存很多,很可能有些gc就不会被启动,这样stmt迟迟没有被关闭,执行一段时间会报错。 所以健壮地代码应

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论