【转】深入理解JDBC Scrollable ResultSet
来源:互联网 发布:平价水乳 知乎 编辑:程序博客网 时间:2024/05/29 16:12
原文:http://lancerchi.blog.163.com/blog/static/84384453201097115738748/
JDBC2.0后提出了三种不同的cursor类型,用户代码可以在创建Statement指定cursor类型,如下:
cursor类型
ResultSet.TYPE_FORWARD_ONLY
默认的cursor类型,仅仅支持向前forward,不支持backforward,random,last,first操作,类似单向链表。
TYPE_FORWARD_ONLY类型通常是效率最高最快的cursor类型
ResultSet.TYPE_SCROLL_INSENSITIVE
支持backforward,random,last,first操作,对其它数据session对选择数据做出的更改是不敏感,不可见的。
ResultSet.TYPE_SCROLL_SENSITIVE
支持backforward,random,last,first操作,对其它数据session对选择数据做出的更改是敏感,可见的。
分析
众所周知,JDBC对数据库进行数据查询时,数据库会创建查询结果的cache和cursor。而数据库的cursor是不支持 backforward,random,last,first操作,仅仅只支持向前forward。那么TYPE_SCROLL_INSENSITIVE 是如何实现支持backforward,random,last,first的呢?很简单,TYPE_SCROLL_INSENSITIVE的 Statement查询把所有fetch的记录都缓存到JVM的Resultset对象内,如果有10个记录,直接跳到最后记 录,TYPE_SCROLL_INSENSITIVE方式下把fetch所有记录到jvm端,并缓存下来,再进行random就是在数据库数组里面进行 的。这也是TYPE_FORWARD_ONLY类型通常是效率最高最快的cursor类型原因,如果要做一些复杂的功能,必然是要牺牲一些效率的。
那么为什么TYPE_SCROLL_INSENSITIVE对选择数据做出的更改是不敏感,不可见的呢?前面提到,JDBC对数据库进行数据查询时,数据库会创建查询结果的cache和cursor,如下面sql:
select name,id from foo
用jdbc执行上面的sql语句时,数据库会把foo表所有记录的name和id字段缓存到cache中,之后cache和真正的数据库数据文件没有任何 联系了,foo表发生的改变在查询完成后不会自动同步到cache上去,因此TYPE_SCROLL_INSENSITIVE对选择数据做出的更改是不敏 感,不可见。
那么TYPE_SCROLL_SENSITIVE是怎么做到其它数据session对选择数据做出的更改是敏感,可见的。上面的sql语句用TYPE_SCROLL_SENSITIVE的Statement来执行,会转化成以下的sql语句:
select rowid from foo
数据库这时候是把foo表所有记录的rowid缓存到cache中,用户代码在fetch记录时,再继续做以下查询:
select name,id from foo where rowid=?
因此这时候发生的查询是实时从真正的数据库数据文件中取,因此对期间发生的数据更改是可见的,敏感的。但是这种可见性仅限于update操作,而 insert和delete同样是不可见的。因为如果查询发生在insert之前,insert生成的rowid并不会反应在cache中的rowid结 果集上。在一个记录的rowid已经缓存到cache中,这时候被删除了,但一般数据库的删除是标记删除,也就是说rowid对应那行记录并没有真正从数 据库文件中抹去,一般是可以再次取到记录的。
总结
TYPE_FORWARD_ONLY类型通常是效率最高最快的cursor类型,也是最常用的选择。
TYPE_SCROLL_INSENSITIVE需要在jvm中cache所有fetch到的记录实体,在大量记录集返回时慎用。
TYPE_SCROLL_SENSITIVE在jvm中cache所有fetch到的记录rowid,需要进行二次查询,效率最低,开销最大
0
上一篇:Tortoise SVN Settings for Beyond Compare 3
下一篇:hashmap与hashtable的区别,以及实现hashmap的同步操
相关热门文章
- Tomcat 6 配置SSI
- tomcat + ssi
- JDK1.6官方下载_JDK6官方下载_...
- Java 判断文件夹、文件是否存...
- 如何正确(完美)卸载Java/JDK/J...
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
0 0
- 【转】深入理解JDBC Scrollable ResultSet
- 深入理解JDBC Scrollable ResultSet
- 深入理解JDBC Scrollable ResultSet
- 深入理解JDBC Scrollable ResultSet
- JDBC中Scrollable ResultSet(滚动结果集)(四)
- JDBC 的ResultSet操作理解
- JDBC resultSet
- JDBC ResultSet
- JDBC ResultSet
- JDBC - ResultSet
- 深入理解JDBC的timeout
- JDBC 之 ResultSet 对象
- JDBC之ResultSet对象
- jdbc resultset.previous():
- JDBC ResultSet setFetchSize
- JDBC ResultSet数据更新
- JDBC ResultSet分析
- JDBC ResultSet分析
- 【转】开源日志库<log4cplus+VS2008使用>整理
- Opera邮件客户端设置
- 图像处理(七)导向滤波磨皮
- Thunderbird使用163邮箱smtp设置方法
- Redis学习笔记6--Redis事务
- 【转】深入理解JDBC Scrollable ResultSet
- hashmap与hashtable的区别,以及实现hashmap的同步操
- 第三方支付宝支付
- 【转】MySQL命令大全
- 【转】IntelliJ IDEA 10.0 64位运行方法
- 运行时动态修复dex
- 【转】2003服务器终端服务器超出最大连接数
- 【转】MySQL负载均衡功能实现概要
- 图像处理(十)基于特征线的图像变形-Siggraph 1992
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
蛇麻子的功效与作用
幺麻子藤椒油价格
麻子仁丸的功效与作用
脸上长麻子图片
出麻子的症状
天麻子的价格
麻子菜的功效
佐佐木麻由子
脸上为什么长麻子
怎么去脸上的麻子
张三李四王二麻子
如何去掉脸上的麻子
麻宁
麻将规则
斗地打麻将
麻将机调
麻将图片
麻将怎么赢
单机打麻将
一万麻将
麻将算番
麻将手游
麻将多少个
qq麻将
招脚打麻将
麻将教程
麻将图
麻将照片
麻将的玩法
图片麻将
麻将公式
麻将有几张
麻将吧
如何打麻将
打麻将秘诀
麻将秘诀
怎样打麻将
打麻将口诀
麻将教学
麻将攻略
高手麻将