关于结果集的经验之谈

有人说JDBC一个接口有什么好研究的。错,不管RowSet、JDBC、SQLJ都是上层东西,研究就研究数据库底层算法啊。但是你别忘了,hibernate为什么这么多人用,简单和高效是我们平常使用最需要的。接下来的文字都是我在结果集上的经验之谈。

一、正确使用close:

很多人使用了ResultSet、Statement、Connection不关闭,《java核心技术》中这样写:"如果Statement对象上有一个打开的结果集,那么调用close方法将自动关闭该结果集。同样地,调用Connection类的close方法将关闭该连接上的所有语句。"所以正确的关闭循序是1、ResultSet.close(), 2、Statement.close(), 3、Connection.close().

并且该书还写了“如果所有连接都是短时性的,那么无需考虑关闭语句和结果集。只需将close放在finally块中。”注意这个“短时性”。我们很多数据库操作都不是短时性,一个事务可能拖很长,一个连接或长事务有很多的语句与结果集,那么该养成什么好习惯呢。在使用完一个结果集与语句后马上ResultSet.close(),Statement.close(),事务仍可继续。这样事务再大都能保证资源及时释放。

二、正确使用事务:

虽说表锁与行锁因数据库而异与sql语句无必然关系,但是事务在JDBC中非常重要。一个长长的事务操作期间,数据库的锁并不释放,而是等Connection.commit(),或Connection.rollback(),才将资源操作权交出来。所以合理划分自己程序数据库操作事务非常重要。千万不能锁A表时等着B表,而另一个事务锁着B表等A表,那就死锁了。

养成事务提交和回滚好习惯,不能将commit的工作交给Connection.close去做。并且连接池的Connection.close可不会马上帮你关闭的。

三、结果集的性能与效率:

数据库操作速率与数据库数据处理算法、数据库性能配置、数据库锁状态等都有关系。我通过一次数据库操作调优来谈谈我们数据库操作的提高性能经验。

首先,我们使用了DB2的排序操作,一开始数据量一大就报表空间不足,原来DB2将分页时的数据保存在系统临时表空间里,我们将表空间缓冲池设在驱动上,这样分页效率已经提高到最大。我曾经尝试过在分页sql中rownumber() over(ORDER BY ref_id ASC) AS rn 的over()中加去掉排序字段而放在where后排序,效果一样效率也一样。

(未完待续)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值