123
返回列表 发新帖
楼主: jaunt

[精华] [TIP]关于Java开发中使用Oracle数据库的一点注意事项(原创)

[复制链接]
论坛徽章:
0
21#
发表于 2004-12-6 15:09 | 只看该作者

这个理解对吗

实际上这是一个JDBC问题,我是一个初学者,但是就现在的了解而言,connection statement 和 resultset 的关闭问题在很大程度上是不需要显示地关闭的,因为首先 connection 可以由连接池管理,是完全可以并行的,而resultset 在结果都被取出的情况下是被JDBC自动关闭的,当然如果只用到了一部分结果可以显示地关闭,同时如果你还要用到同样的statement 就不必关闭它,因为新的 resultset 会覆盖旧的结果集。(以上情况不涉及循环),另外就楼上有人问的直接关了connection 那 statement 和 resultset 怎么办,不用担心,因为那样的话,JDBC会关闭所有。这是一点粗浅的看法,希望有人能指正我

使用道具 举报

回复
论坛徽章:
56
2010年世界杯参赛球队:瑞士
日期:2010-02-26 11:04:012012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23版主2段
日期:2012-05-31 02:10:00版主2段
日期:2012-05-31 02:10:00ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07现任管理团队成员
日期:2012-10-18 18:22:36
22#
发表于 2004-12-6 15:43 | 只看该作者

Re: 这个理解对吗

最初由 SUNONEJcy 发布
[B]实际上这是一个JDBC问题,我是一个初学者,但是就现在的了解而言,connection statement 和 resultset 的关闭问题在很大程度上是不需要显示地关闭的,因为首先 connection 可以由连接池管理,是完全可以并行的,而resultset 在结果都被取出的情况下是被JDBC自动关闭的,当然如果只用到了一部分结果可以显示地关闭,同时如果你还要用到同样的statement 就不必关闭它,因为新的 resultset 会覆盖旧的结果集。(以上情况不涉及循环),另外就楼上有人问的直接关了connection 那 statement 和 resultset 怎么办,不用担心,因为那样的话,JDBC会关闭所有。这是一点粗浅的看法,希望有人能指正我 [/B]

你的理解是正确的
如果你不显式地关闭connection和statement,jvm的Garbage Collector会自动去回收它。但是在你用完后,到GC自动回收还需要不确定的一段时间,在这段时间里,资源就被白白浪费掉了。

使用道具 举报

回复
论坛徽章:
56
2010年世界杯参赛球队:瑞士
日期:2010-02-26 11:04:012012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23版主2段
日期:2012-05-31 02:10:00版主2段
日期:2012-05-31 02:10:00ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07现任管理团队成员
日期:2012-10-18 18:22:36
23#
发表于 2004-12-7 11:55 | 只看该作者
今天又看了书上的相关章节,更加意识到手动释放资源的必要性
因为GC又很多不确定性
1。不确定会运行,也不确定什么时候运行,可能在一个程序从启动到结束,GC都从未运行过
2。即使你调用了System.gc(),也并不能确定所有的无用对象都被回收

使用道具 举报

回复
论坛徽章:
59
马上加薪
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41灰彻蛋
日期:2011-10-28 14:15:35管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-02-18 11:43:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:15
24#
发表于 2004-12-7 14:22 | 只看该作者

Re: 这个理解对吗

最初由 SUNONEJcy 发布
[B]实际上这是一个JDBC问题,我是一个初学者,但是就现在的了解而言,connection statement 和 resultset 的关闭问题在很大程度上是不需要显示地关闭的,因为首先 connection 可以由连接池管理,是完全可以并行的,而resultset 在结果都被取出的情况下是被JDBC自动关闭的,当然如果只用到了一部分结果可以显示地关闭,同时如果你还要用到同样的statement 就不必关闭它,因为新的 resultset 会覆盖旧的结果集。(以上情况不涉及循环),另外就楼上有人问的直接关了connection 那 statement 和 resultset 怎么办,不用担心,因为那样的话,JDBC会关闭所有。这是一点粗浅的看法,希望有人能指正我 [/B]


不能这么想啊, 在有很多用户并行使用系统的条件下, 连接池所管理的连接如果不及时释放, 就会出现连接不足的错误, 而片面加大连接数会吃掉大量内存, 造成不必要的浪费
而resultset也不能理解成覆盖, 而只能理解成对象的遗弃, 也就是说, 这个结果集会一直存在于内存之中, 直到JAVA的垃圾收集器把它清除, 更为糟糕的是, 结果集的存在会在DB上留下相应的临时表(虽然你看不到它的存在) 直到DB上的垃圾收集机制把它清除掉

这些都是不必要的系统负担, 很容易引起内存泄漏等问题, 在多用户连续运行的系统中一定要尽量避免, 否则系统就会象WINDOWS95/98那样, 使用一段时间就需要重新启动, 以清理内存(这可是真正的手工清理内存哦), 否则就可能莫名其妙地死掉

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表