JDBC 应用程序游标可持有性支持
游标可持有性功能可以减少 JDBC 与关系数据库交互的开销,从而帮助提高应用程序性能。
通过激活游标可持有性,能使结果集可供多个 JDBC 调用跨事务边界使用。可持有性设置触发数据库游标,以使最近更新的那些行在生成新值或结果集的事务落实之后仍保持为活动的。因此,游标使结果集可供后面事务中的语句使用。
设置游标可持有性
请使用下列其中一项技术来设置游标可持有性。有关更多详细信息,请参阅 Oracle Web 站点提供的 JDBC 3.0 规范,网址为 http://www.oracle.com/technetwork/java/index.html。
- 在使用 createStatement、prepareStatement 或 prepareCall 方法创建或准备语句时,请指定 ResultSet.HOLD_CURSORS_OVER_COMMIT 参数。
- 请对 Connection 对象调用 setHoldability 方法。使用此方法设置的游标可持有性值成为缺省值。如果对 Statement
对象指定了游标可持有性,那么该值会覆盖对连接对象指定的值。
在另一个句柄引用了可共享连接之后,不能对该连接指定游标可持有性。此时调用可持有性方法会生成异常。如果想要对可共享连接设置游标可持有性,请在该连接被占用之前调用该方法。否则,共享连接会保留在前一占用期间应用的可持有性值。
- 请查看数据库文档,以了解产品是否支持游标可持有性作为数据源属性。例如,如果将它设置为数据源定制属性,那么 DB2® 会对可持有性触发器进行响应。请参阅主题“定制属性设置”以了解更多信息。
连接和事务行为对游标可持有性的影响
在 WebSphere® Application Server 中设置游标可持有性会导致不同事务事件的以下行为:
- 当连接已关闭时,即使设置了游标可持有性,所有语句和结果集也都会被关闭。
- 当事务已回滚时,即使设置了游标可持有性,所有结果集也都会被关闭。
- 当局部事务已落实时,共享和非共享连接都可以具有跨事务边界的开放式结果集。
- 当全局事务已落实时,非共享连接可以具有跨事务边界的开放式结果集。对于可共享连接,即使设置了游标可持有性,语句和结果集也会被关闭;可持有性值不会影响参与全局事务的可共享连接。
- 当局部事务作用域结束时,无论是在方法级别还是在活动会话级别上,共享连接的所有语句和结果集都会被关闭。非共享连接的语句和结果集会一直保持为开放,直到对该连接调用了 close 方法为止。
注: 对于具有非共享连接的全局事务,后端数据库具有支持游标可持有性的职责。