CachedRowSet 包就是 sun.jdbc.RowSet 包,用户可以在网站上载 CachedRowSet 包。在 CachedRowSet 包中有一个抽象类 BaseRowSet,它是 CachedRowSet 类和 JdbcRowSet 类的直接父类,也是 WebRowSet 类的间接父类。

BaseRowSet 类

BaseRowSet 类继承自 java.lang.Object,它是一个抽象类(abstract),在 BaseRowSet 类的定义中,它仅仅声明了成员方法名而没有实现成员方法的功能,这些功能需要在继承 BaseRowSet 类的类或者接口中实现。CachedRowSet 类和 JdbcRowSet 类都实现了 BaseRowSet 类中声明的成员方法,所以它们都不是抽象类。

在 BaseRowSet 类中主要定义的成员方法和成员变量如下。

1. 设置或者获取 XXXRowSet 对象与数据库建立连接的连接参数

首先需要声明,这里所说的 XXXRowSet 对象,指的是 CachedRowSet 类、JdbcRowSet 类、WebRowSet 类的实例对象,而不是指 javax.sql.RowSet 接口的实例对象,对于这一点,读者一定要特别注意。

BaseRowSet 声明了 setPassword()、getPassword()、setUsemme()、getUsemame()、setURL()、getURL() 等方法,这些方法主要用于指定或者获取 RowSet 对象与数据库建立连接的连接参数,类似的方法还有很多,如 setType()、setTypeMap()、getType()、getTypeMap() 等。

读者应该不难发现,这些方法和 javax.sql、RowSet 接口中定义的方法一模一样,不过这两者之间似乎没有任何联系,BaseRowSet 类继承自 java.lang.Object,而 RowSet 接口继承自 java.sql.ResultSet 接口。

2. XXXRowSet对象的监听器

BaseRowSet 类中声明了 addRowSetListener() 方法和 removeRowSetListener() 方法,这两个方法分别用于将一个事件监听器绑定在 XXXRowSet 对象上和解除这种绑定关系。javax.sql.RowSet接口也定义了类似的方法。

3. 发送SQL命令和设定SQL命令的输入参数(IN参数)

BaseRowSet 类同样声明了 setCommand()、execute() 方法,分别用于向数据库系统发送 SQL 命令和执行 SQL 命令,并用数据库返回的数据填充 XXXRowSet 对象。

BaseRowSet 类也声明了一整套的 setXXX() 方法,用于指定 SQL 命令的输入参数(IN参数),如 setString()、setBlob()、setClob()、setObject() 等方法。javax.sql.RowSet 接口也定义了类似的方法。

4. 流成员变量

BaseRowSet 类还定义了若干个流成员变量,用于保存 getXXXStream() 方法返回的流类对象,这些成员变量如下。

  • protected java.io.InputStream asciiStream :成员变量 asciiStream 用于保存 getAsciiStream() 方法返回的 ASCII 流,这是 javaio.InputStream 类型的变量。
  • protected java.io.Reader charStream :成员变量 charStream 用于保存 getCharacterStream() 方法返回的 char 流,这是 java.io.Reader 类型的变量。
  • protected java.io.InputStream unicodeStream:成员变量 unicodeStream 用于保存 getUnicodeStream() 方法返回的 Unicode 流,这是 java io.InputStream 类型的变量。
  • protected java.io.InputStream binary Stream:成员变量 binaryStream 主要用于保存 getBinaryStream() 方法返回的 binary 流,这是 java.io.InputStream 类型的变量。

CachedRowSet 类

CachedRowSet 类是 CachedRowSet 包中最重要的类,它继承自 BaseRowSet 类。CachedRowSet 对象为规范的数据提供了一个无连接的(disconnected)、可串行化的(serializable)、可以滚动的(scrollable,指数据指针可以前后移动)容器。

CachedRowSet 对象可以简单地看作是一个与数据库断开连接的结果记录集,它被缓存在数据源之外,因为所有的数据都被缓存在内存之中,所以 CachedRowSet 对象不适合于处理含有海量数据的记录集。

CachedRowSet 对象的重要作用是:它可以作为数据容器,在不同的应用程序的不同组件之间传送数据。例如,一个运行于 Application Server 上的 Enterprise JavaBean 组件可以使用 JDBCAPI 访问数据库,然后可以使用 CachedRowSet 对象将数据库返回的数据通过网络发送到运行于客户端浏览器上的 Java Applet 程序或者 JavaBean 组件。

如果客户端由于资源的限制或者出于安全上的考虑,没有办法使用 JDBC 数据库驱动程序,例如 Personal Java Clients、Personal Digital Assistant(PDA)、Network Computer(NC) 等客户端,这时使用 CachedRowSet 类就可以提供一个 Java Client 用以处理数据库的规范数据。

CachedRowSet 类的第三个作用是:它可以通过使用数据源以外的空间缓存记录集的数据,从而不需要 JDBC 数据库驱动程序帮助,就实现了结果记录集的数据库游标的前后移动。

CachedRowSet 对象获取数据以后,就断开了和数据源的连接,只有执行更新操作时,才再度与数据库建立连接。某些jDBC驱动程序目前仍然不支持结果记录集的数据库游标的前后移动,这时可以使用 CachedRowSet 类来实现。

提示:

如果使用的 JDBC 数据库驱动程序是 JDBC-ODBC 桥驱动程序,则用 ResultSet 接口、Statement 接口以通常的方法访问数据库,似乎无法实现记表集的数据库游标的前后移动,特别是不能向后移动亦不能定位到任意行,如果读者碰到了类似的问题,除了更换 JDBC 驱动程序以外不妨使用 CachedRowSet 类。

下面我们详细介绍如何使用 CachedRowSet 类。

1. 创建CachedRowSet类的实例对象

如果想使用 CachedRowSet 类的强大功能,必须首先创建 CachedRowSet 类的实例对象,如何创建呢?可以使用 CachedRowSet 类的构造函数,CachedRowSet 类的构造函数是 CachedRowSet(),该函数没有任何参数。CachedRowSet() 函数初始化了下面的属性值:

  1. onInsertRow=false
  2. insertRow=null
  3. cursorPos=0
  4. numRows=0
  5. showDeleted=false
  6. queryTimeout=0
  7. maxRows=0
  8. maxFieldSize=0
  9. RowSetType=ResultSet.TYPE_SCROLL_INSENSITIVE
  10. concurrency=ResultSet.CONCUR_READ_ONLY
  11. readonly=false
  12. isolation=Connection.TRANSACTION_READ_COMMITTED
  13. escapeProcessing=true
  14. absolutePos=0

新创建的 CachedRowSet 对象默认可以容纳 100 个记录所包含的数据。

指定 CachedRowSet 对象和数据库建立连接的连接属性,就可以使用 setPassword()、setUsemame()、setURL() 等方法指定 CachedRowSet 对象和数据库建立连接的连接参数(当然了,需要首先载入 JDBC 驱动程序)。

setPassword()、setUsemame() 等方法都是在 BaseRowSet 类中声明的,然后在 CachedRowSet 类中实现方法的功能。

2. 使用记录集数据填充CachedRowSet对象

使用记录集的数据填充 CachedRowSet 对象的方法如下。

① 和 javax.sql.RowSet 接口所使用的方法如出一辙,设定了 CachedRowSet 对象的数据库连接参数以后调用 setCommand() 方法指定 SQL 命令,再使用 setXXX() 方法设定 SQL 命令的输入参数(如果有输入参数的话),接着就可以使用 execute() 方法首先利用设定好的连接参数和数据库建立连接,发送 SQL 命令,执行 SQL 命令,获取数据库返回的数据,并用这些数据填充 CachedRowSet 对象的内部记录集结构。注意这种方法所使用的 execute() 方法不带任何参数。

② 首先载入 JDBC 数据库驱动程序,然后与数据库建立连接,创建 Connection 接口的实例对象,接着用 setCommand() 方法指定 SQL 命令,如果存在 SQL 输入参数则可以使用 setXXX() 方法指定 IN 参数,一切就绪后,就可以调用 execute() 方法。execute() 方法可以往数据库发送 SQL 命令,并用数据库服务器返回的数据填充 CachedRowSet 对象。两个 execute() 方法的定义如下:

  1. public void execute(java.sql.Connection connection);
  2. public void execute();

③ 首先载入 JDBC 数据库驱动程序,分别创建 Connection 接口的实例对象,Statement 接口的实例对象接着调用 Statement 对象的 execute() 方法执行数据库操作,返回一个 ResultSet 接口的实例对象,然后就可以使用 CachedRowSet 类的 populate() 方法将 ResultSet 对象的数据填充到 CachedRowSet 对象内部的记录集结构中。

populate() 方法的定义如下:

  1. public void populate(java.sql.ResultSet data)

JDBC BaseRowSet类和CachedRowSet类相关推荐

  1. JDBC概念快速入门工具类Util的写法

    JDBC概念&快速入门&工具类Util的写法 概念 Java Database Connectivity Java 数据库连接,用Java语言操作数据库 JDBC本质:官方定义的一套操 ...

  2. java 集成 模板类_几个使用JDBC Template常用的工具类

    几个使用JDBC Template常用的工具类 第一:IntegerRowMapper 代码: public classIntegerRowMapperimplementsRowMapper { pu ...

  3. c++ 嵌套私有类_嵌套类和私有方法

    c++ 嵌套私有类 当您在另一个类中有一个类时,他们可以看到彼此的private方法. 在Java开发人员中并不为人所知. 面试过程中的许多候选人说, private是一种可见性,它使代码可以查看成员 ...

  4. 【用户画像】标签任务开发流程(源码之实体类、工具类、配置文件、DAO层)

    文章目录 一 代码实现 0 开发主线 1 实体类 (1)TagInfo (2)TaskInfo (3)TaskTagRule 2 工具类 (1)连接sql的工具类 测试 (2)专门读取properti ...

  5. oracle数据库中选择桌面类和服务器类的区别

    在以前的学习过程中,一直用到的都是sql server数据库,之后接触到了oracle数据库.在安装过程中,有两个选项,桌面类和服务器类,当时按照网上的安装步骤,选择了桌面类,后来公司里他们安装都是用 ...

  6. python中的新式类与旧式类的一些基于descriptor的概念(上)

    python中基于descriptor的一些概念(上) 1. 前言 2. 新式类与经典类 2.1 内置的object对象 2.2 类的方法 2.2.1 静态方法 2.2.2 类方法 2.3 新式类(n ...

  7. C++ 笔记(16)— 类和对象(类定义、类实例对象定义、访问类成员、类成员函数、类 public/private/protected 成员、类对象引用和指针)

    1. 类的定义 类定义是以关键字 class 开头,后跟类的名称.并在它后面依次包含类名,一组放在 {} 内的成员属性和成员函数,以及结尾的分号. 类声明将类本身及其属性告诉编译器.类声明本身并不能改 ...

  8. java 类定义_JAVA类与对象(二)----类定义基础

    类是组成java程序的基本要素,是java中的一种重要的复合数据类型.它封装了一类对象的状态和方法,是这一类对象的原型.一个类的实现包括两个部分:类声明和类体,基本格式: class { 属性 方法 ...

  9. C++派生类与基类构造函数调用次序

    本文用来测试C++基类和派生类构造函数,析构函数,和拷贝构造函数的调用次序. 运行环境:SUSE Linux Enterprise Server 11 SP2  (x86_64) #include & ...

最新文章

  1. 为什么绩效管理如此重要?有哪些数字化绩效管理工具?
  2. java final修饰符_java final修饰符详解,final修饰方法
  3. 8086的内存分段机制
  4. TUST 数据库原理 试卷(A)
  5. 语言把数据写入csv文件_把JSON/CSV文件打造成MySQL数据库
  6. python selenium_自动化测试:Selenium+Python环境搭建
  7. iphone桌面上的圆圈怎么设置_iPhone的备忘录如何排序?什么便签可以更改排列展示顺序...
  8. matlab 拖动曲线,Matlab屏幕交互取点并作三次样条曲线matlab GUI:屏幕取点+三次样条曲线+屏幕拖动 | 学步园...
  9. 浮动元素引起的问题和解决办法
  10. mysql 插入汉字出现问号 解决方法
  11. 基于springboot+vue的二手商城(闲置物品交易)(前后端分离)
  12. matlab深度学习之LSTM预测
  13. 一个在线文本比较工具
  14. 海思hi3516移动侦测代码并显示输出
  15. html中引号的作用,引号的作用是什么
  16. Java企业工商信息查询
  17. 快速批量下载 B 站视频
  18. android中倒计时动画,Android实现倒计时效果
  19. 告别powerpoint,像程序员一样做slides~
  20. 【解决问题】修复虚拟机报错,写入文件时出错,请确认您有访问该目录的权限

热门文章

  1. 【供应链】供应链的底牌
  2. Ubuntu上制作windows启动盘
  3. 污水处理物联网手机APP远程监控系统,无论你在哪里只要手机有信号,便能随时监控现场设备。
  4. 【干货】网红营销如何转化成付费订单?
  5. vue动态设置页面title
  6. 游戏秘籍:《上古卷轴5:天际》厄金坦德圣所卡任务控制台解决方法
  7. UE4学习笔记----使用草地工具
  8. Lua_安卓图色脚本开发入门_基于叉叉
  9. 平板电脑能打电话吗?如何让不支持电话功能的平板获得电话功能?
  10. ubuntu下交叉编译arm内核模块