ResultSet结果集再次赋值问题

jingying838 2011-08-31 10:40:18
在jdbc对数据库进行查询时,返回的ResultSet结果集对象如果没被close就再次被赋值,请问原来那个结果集是否还在堆中存在?
...全文
372 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
闷头挣钱 2011-08-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 leehomwong 的回复:]
如果你不使用连接池,那么就没有什么问题,一旦Connection关闭,数据库物理连接就被释放,所有相关Java资源也可以被GC回收了。

但是如果你使用连接池,那么请注意,Connection关闭并不是物理关闭,只是归还连接池,所以PreparedStatement和ResultSet都被持有,并且实际占用相关的数据库的游标资源,在这种情况下,只要长期运行,往往就会报“游标超出数据库允许的最……
[/Quote]
自己做一个连接池,链接归还的时候清理一下呗,包括自动提交状态啥的
24K純帥 2011-08-31
  • 打赏
  • 举报
回复
如果你不使用连接池,那么就没有什么问题,一旦Connection关闭,数据库物理连接就被释放,所有相关Java资源也可以被GC回收了。

但是如果你使用连接池,那么请注意,Connection关闭并不是物理关闭,只是归还连接池,所以PreparedStatement和ResultSet都被持有,并且实际占用相关的数据库的游标资源,在这种情况下,只要长期运行,往往就会报“游标超出数据库允许的最大值”的错误,导致程序无法正常访问数据库

这是robbin大侠说的
风尘中国 2011-08-31
  • 打赏
  • 举报
回复
个人意见:重新赋值的话应该是重新返回一块内存了,原来ResultSet数据的那块内存应该会被自动回收
ydj552110737 2011-08-31
  • 打赏
  • 举报
回复
长时间不用会被垃圾收集器带走
kiss601459202 2011-08-31
  • 打赏
  • 举报
回复
没有 close 就没有释放
AndsionLee 2011-08-31
  • 打赏
  • 举报
回复
我觉得LZ没问这么复杂。Rs没有Close() 就赋值, 原来的RS还在不在。 显然不在嘛。引用类型当前重新赋值则改变原有的值,如果是重New 一个则不改变。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧