JDBC2.0后提出了三种不同的cursor类型,用户代码可以在创建Statement指定cursor类型,如下: Statement createStatement( int resultSetType, int resultSetConcurrency)
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,需要进行二次查询,效率最低,开销最大
分享到:
相关推荐
jquery tools scrollable demo 自己整理写的备忘小demo
Scrollable的使用与改装,包括状态栏改颜色。 适用于app中的个人主页页面
scrollable jquery ui 下载
Scrollable HTML table Source JS and Example
Scrollable.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
自己加了点功能,1. 支持iframe内的表格2.支持表格的滚动条在左边并且可配3.表格高度可配 增加参数:doc1(页面document对象,如果想对iframe内的页面产生左右,传入那个页面的document对象),scDir(方向'left'或者right)
只要引用JS就行 但是这种方法不支持 纵向 固定表头和拖动.
https://www.npmjs.com/package/react-native-scrollable-tab-view基础使用:var ScrollableTabView = require('react-native-scrollable-tab-view'); var App = React.createClass({ render() { ...
enhancements such as scrollable result sets and updatable result sets, including support issues under JDK 1.1.x. Chapter 13, "Performance Extensions" This chapter describes Oracle extensions to the ...
ng-scrollable, AngularJS的Superamazing滚动条 滚动AngularJS的Superamazing滚动条:为什么要滚动?因为 Firefox 不支持滚动条样式,或者其他 跨浏览器 选项不支持滚动条样式,所以对于复杂的单一页面应用程序来说...
shinkWrap(boolean)是否由看到的内容决定列表的滚动范围 Expanded 设置可扩展的范围
android ScrollableView
scrollable提供的一系列获取scrollable对象的方法具体使用方式如下: 代码如下:var scrollable=$(“div.scrollable”).scrollable(); //alert(scrollable.getConf().prev);//获取配置对象中的prev属性 ...
Scrollable是一个灵活、轻量级用于创建滚动内容的jQuery插件。任何内容(HTML、视频、文件、图片等...)都可以作为一个滚动项。支持水平与垂直两种滚动方向。用途:滚动效果,可制作分步验证页面
本文实例讲述了jQuery滚动插件scrollable.js用法。分享给大家供大家参考,具体如下: Scrollable是一个灵活、轻量级用于创建滚动内容的jQuery插件。任何内容(HTML、视频、文件、图片等…)都可以作为一个滚动项。...
react-native scrollable tab view入门1
A scrollable, zoomable, and scalable picture box
Scrollable是一个灵活、轻量级 用于创建滚动内容的jQuery插件。任何内容(HTML、视频、文件、图片等...)都可以作为一个滚动项。支持水平与垂直两种滚动方向。
A scrollable, zoomable, and scalable picture box
安装npm install --save react-scrollable-feed用法 import * as React from 'react'import ScrollableFeed from 'react-scrollable-feed'class App extends React . Component { render ( ) { const items = [ '...