栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JDBC类型滚动不敏感和敏感

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JDBC类型滚动不敏感和敏感

与其他 不起作用的
功能一样,使用它们之前必须阅读文档。

重要的是窗口的概念

滚动敏感结果集的Oracle实现涉及窗口的概念,窗口的大小基于访存大小。窗口大小影响结果集中更新行的频率。

因此,要观察每一行的变化,必须将 提取大小 设置为1。

请注意,不足以设置 resultSet 的获取大小,因为默认的获取大小为10,并且更改仅对第11行及后续行有效。

因此,必须在以下位置设置抓取大小

prepareStatement

 def stmt = con.prepareStatement("""select id, val from test where  id between ? and ?  order by id""", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE) stmt.setFetchSize(1) // set bind variables and execute statement

现在,每次调用

rs.next()
都会打开一个新窗口,这会导致内部调用
refreshRow

从数据库获取当前值。

请注意,此行为仅执行一次

TYPE_SCROLL_SENSITIVE
TYPE_SCROLL_INSENSITIVE
否则将
refreshRow
被调用,因此即使您切换窗口,也可以看到初始查询时的常量数据。您可以
refreshRow
显式调用以看到相同的效果。

从技术上讲,该功能是使用两个游标实现的。第一个与使用的查询相对应,仅添加ROWID列。

 select rowid as "__Oracle_JDBC_internal_ROWID__", id, val from test where  id between :1  and :2   order by id

在每个窗口开关上调用的第二个游标(即,对于所获取的每一行,其获取大小= 1)简单外部将

rowid
第一个游标的保存与查询联接起来以重新获取当前数据。

WITH "__JDBC_ROWIDS__" AS (SELECt COLUMN_VALUE ID, ROWNUM NUM FROM TABLE(:1 ))SELECt "__JDBC_ORIGINAL__".*FROM (select rowid as "__Oracle_JDBC_internal_ROWID__", id, val from testwhere  id between :2  and :3   order by id) "__JDBC_ORIGINAL__", "__JDBC_ROWIDS__"WHERe "__JDBC_ORIGINAL__"."__Oracle_JDBC_internal_ROWID__"(+) = "__JDBC_ROWIDS__".IDORDER BY "__JDBC_ROWIDS__".NUM

简短的回答 是, 默认获取你所使用的大小来高去观察一个单列的更新

测试完成于

Oracle Database 12c Enterprise Edition Release 12.2.0.1.0

DriverVersion 12.2.0.1.0



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/516311.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号