`

jdk1.5中RowSet子接口教程

 
阅读更多

在jdk1.4的javax.sql包中有一个RowSet接口,但是没有具体实现的类。”Tiger”诞生之后,引入了javax.sql.rowset包中的五个子接口和com.sun.rowset包里面的对应的五个实现类,这样我们就可是使用功能强大的RowSet了。

jdk1.5中RowSet的五个子接口分别是JdbcRowSet,CachedRowSet,WebRowSet,JoinRowSet和FilteredRowSet,他们为我们的数据库开发带来了强大的功能和方便的操作。
  java运行环境是:RedHat 9
  Jdk 1.5.1_01
  Eclipse 3.1m4
  MySql 4.1.10 (JDBC Driver:org.gjt.mm.mysql.Driver)

  首先在test数据库里面创建了两个表用于这次的学习,下面是脚本:


create table table1 (id int not null , name varchar(20) not null);
  create table table2 (id int not null, info varchar(20) not null);

  然后我就插入了一些数据用于测试。以下内容以我的环境示意,大家只要修改相应地方就可用于自己的测试。

  RowSet对象可分为两类:有连接的和无连接的。JdbcRowSet是唯一一个有连接的实现,和传统的ResultSet一个样,有连接的实现是基于Jdbc驱动的连接,数据库的连接是贯穿整个对数据库的操作。而无连接的实现是基于Reader和Writer流的连接,在需要读取数据和写入数据的时候才建立连接,在整个操作过程中都是断开连接的,后面四个接口对象都是无连接的实现。下面我就针对每一个接口来介绍一下它们各自的功能。

JdbcRowSet接口:

  我的理解是这个接口基本上和ResultSet有类似的功能,只不过它的结果集默认是ResultSet.TYPE_SCROLL_INSENSITIVE和ResultSet.CONCUR_UPDATABLE的,也就是说默认的结果集就是可以上下滚动和可更新的。

  因为本身RowSet接口就是ResultSet的子接口,所以1.5里面的所有RowSet都有ResultSet的方法,而JdbcRowSet又只是在默认的属性和ResultSet有区别,所以它对结果集的操作方法和ResultSet都是一样的,我就不具体介绍了,大家可以参考API。

  下面我介绍一下JdbcRowSet的创建方法,这有两种方法,一种是基于传统的JDBC连接数据库的方法:
 

Class.forName(“org.gjt.mm.mysql.Driver”);
  Connection conn=DriverManager.getConnection(“jdbc:mydql://localhost:3306/test”,”root’,””);
  Statement stmt=conn.createStatement();
  ResultSet rs=stamt.executeQuery(“select * from table1”);
  JdbcRowSet jrs=new JdbcRowSetImpl(rs);

  这样就创建了一个对象(JdbcRowSetImpl是com.sun.rowset包里面的实现类,文中的五个接口在包中都对应有一个实现类),这个对象里面的数据就是和rs里面的数据是一样的。还有一种创建的方法是使用默认的构造方法,然后set属性得到数据,个人推荐使用第二种方法:

  

JdbcRowSet jrs=new JdbcRowSetImpl();
  jrs.setUrl(“jdbc:mydql://localhost:3306/test”);
  jrs.setUsername(“root”);
  jrs.setPassword(“”);
  jrs.setCommand(“select * from table1”);
  jrs.execute();


  这样创建的对象是和第一种方法是一样的结果。当然这种方法可以连接一个数据源,如果我们在上下文环境种绑定了一个数据源,JNDI名字是dataSource1,那么下面的代码就可以获得对象:
 

JdbcRowSet jrs=new JdbcRowSetImpl();
  jrs.setDataSourceName(“dataSource1”)
  jrs.execute();


  得到对象之后我们就可以使用相应的方法来对数据进行遍历,更新,插入或者删除。

  有2点要说明:第一,其它四个接口的对象中除了JoinRowSet创建方式基本都是一样的,只是接口名字和接口实现类的名字不同而已,后面我就不再说明创建对象的方法了。第二,虽然JdbcRowSet默认是可滚动和可更新的,但是这也是需要数据库驱动支持的,我使用的MySql驱动就不支持更新结果集,所以大家使用之前需要阅读驱动的说明文档。

CachedRowSet接口:

  它继承于RowSet接口,而且他是无连接的RowSet的其他3个实现的父接口,也就是说其他3个接口都直接或者间接继承了它。从名字我们可以知道,它的原理就是读入数据保存在缓存进行相应的操作。

  创建接口对象除了上面的两种创建方式,还有一个方法,就是在构造方法里面传递一个SyncProvider。之前我说过无连接的RowSet都是基于流读写的,那么这里所说的SyncProvider就是提供了特定的Reader和Writer。jdk1.5文档的Sample Coder有这样的实现:
  

String provider= “com.fred.providers.HighAvailabilityProvider”
  CachedRowSet crs=new CachedRowSetImpl(provider);



  这样我们就为RowSet设置了特定的Reader和Writer,但是这是需要第三方的包支持的。而我们使用无参的构造方法创建的对象是使用了默认的SyncProvider,当然一般来说这对于我们就已经足够了。创建了对象之后就可以使用和JdbcRowSet一样的方法来进行就结果集的增删改操作了,但是唯一不同的就是在更新了结果集之后必须调用Writer将缓存中的数据写入数据库,而其方法就是crs.acceptChages();

  CachedRowSet提供的最令人兴奋的功能就是分页功能。以前程序员很头疼的问题就是怎么处理数据分页而不影响性能,现在有了CachedRowSet一切都变得那么简单,请看下面的代码:

CachedRowSet crs=new CaehedRowSetImpl();
  crs.setUrl(“jdbc:mydql://localhost:3306/test”);
  crs.setUsername(“root”);
  crs.setPassword(“”);
  crs.setCommand(“select * from table1”);
  crs.setPageSize(5);
  crs.execute();
  while(crs.nextPage())
  while(crs.next())
  System.out.println(crs.getInt(“id”+”/t/t”+crs.getString(“name”));


  我们在crs.execute()之前设置每页的数据行数,那么Reader读取数据的时候就只读指定的行数的数据,这样我们就避免了一次读取所有数据再进行分页操作。是不是很简单呢?

JoinRowSet接口:
  这个接口可以提供我们在无连接的状态下直接对结果集进行Join。下面的代码提供了JoinRowSet的实现:
  

CachedRowSet crs1=new CaehedRowSetImpl();
  crs1.setUrl(“jdbc:mydql://localhost:3306/test”);
  crs1.setUsername(“root”);
  crs1.setPassword(“”);
  crs1.setCommand(“select * from table1”);
  crs1.execute();
  CachedRowSet crs2=new CaehedRowSetImpl();
  crs2.setUrl(“jdbc:mydql://localhost:3306/test”);
  crs2.setUsername(“root”);
  crs2.setPassword(“”);
  crs2.setCommand(“select * from table2”);
  crs2.execute();
  JoinRowSet jrs=new JoinRowSetImpl();
  jrs.addRowSet(crs1,”id”);
  jrs.addRowSet(crs2,”id”);
  while(jrs.next())
  System.out.println(jrs.getInt(“id”)+”/t/t”+jrs.getString(“name”)+”/t/t”+jrs.getString(“info”);


  这段代码的作用和执行select * from table1 inner join table2 on table1.id=table2.id语句得到的结果集是一样的。但是我个人认为与其这样复杂地使用JoinRowSet,不如直接使用这条Join语句来得到CachedRowSet。

  默认的Join是inner join的,接口还支持cross join,full join,left outer join和right outer join,我们通过setJoinType()方法来修改连接类型,当然这还是需要数据库的支持。还有一个值得注意的地方就是,在这个例子里我连接的列在两个表里面都叫id,那么我们取数据的时候就使用id这个名字,那如果两列的名字不一样呢?系统就会为这个连接列取一个默认的名字叫做”MergedCol”。

FilteredRowSet接口:

  .NETADO.NET支持获取结果集使用一定的条件过滤从而得到不同的结果,那现在jdk1.5也能做到了,FilterRowSet接口让我们可以灵活地定义过滤条件达到不同的效果。Javax.sql.rowset包里面的Predicate接口就是这个过滤器,我们通过实现这个接口定义过滤条件,下面是示意代码:

public class Filter implements Predicate {
  private int min;
  private int max;
  private String colName;
  public Filter (int min ,int max ,String colName)
  {
   this.min=min; this.max=max; this.colName=colName;
  }
  public boolean evaluate (RowSet rs) {
  CachedRowSet crs=(CachedRowSet)rs;
  if((crs.getInt(colName)>min)&& (crs.getInt(colName)<max>   return true; <br>else return false; <br>  } <br>  }</max>



  下面我们就使用这个过滤器来过滤掉id不在min和max之间的数据:
  

FilteredRowSet frs=new FilteredRowSet();
  ……
  frs.setCommand(“select * from table1”);
  frs.execute();//先获取所有数据;
  frs.setFilter(new Filter(1,20,”id”);//过滤掉id值不在1和20之间的数据;


  因为实现Prdicate接口里面的方法很灵活,所以我们就能很灵活地设置过滤条件,我们就可以只通过一条语句得到不同的结果。

WebRowSet接口:

  XML因为其平台无关性越来越受到开发者的青睐,它也是数据持久化的一个不错的选择,WebRowSet封装了读写XML的方法,我们就可以轻松地把数据库的数据持久化到XML或者从XML读取数据写入数据库。

  写入到XML文件的方法是wrs.writeXML(new FileOutputStream(“data.xml”));它执行的结果是把内存中的数据写入当前目录里面的data.xml文件中。在这个xml文件里面记录了三类数据:

  properties:包括setXXX()方法所有的属性,没有设置的就是默认属性

  metadata:包括数据库表的相关元数据,对应ResultSetMetaData里的信息

  data:结果集的全部数据,从xml文件读取数据装载到RowSet的方法是readXML(…);只要是按照规范的格式写的xml都可以装载进来。
分享到:
评论

相关推荐

    jdk1.5 windows版本 64位

    标题:“jdk1.5 windows版本 64位” 描述:“jdk1.5 windows版本 64位,Java开发依赖环境” 标签:“windows” 在这个主题中,我们聚焦的是Oracle JDK 1.5(也被称为Java Development Kit,简称JDK)在Windows...

    jdk1.5x64位 windows版.zip

    综上所述,JDK1.5是Java发展历程中的一个重要里程碑,它的特性改进了编程体验,提升了代码质量和运行效率。而64位Windows版的JDK1.5,则是针对Windows用户的一种优化选择,满足了开发者在64位环境下的需求。文件"jdk...

    linux系统jdk1.5下载

    Linux系统中的JDK1.5是Java开发工具包的一个早期版本,主要针对Java语言的编译、运行和调试提供支持。这个版本在今天已经相对较为罕见,因为Java已经有了多个后续版本,包括JDK7、JDK8、JDK9直至最新的JDK17等。然而...

    Java-jdk1.5安装包

    在JDK1.5中,开发者可以在方法签名中使用省略号(...)表示可变参数。这允许方法接受任意数量的相同类型的参数,如: ```java public void printNumbers(int... nums) { // 代码块 } ``` 这个方法可以接收一个或多...

    JDK1.5中文帮助文档

    这个“JDK1.5中文帮助文档”是官方英文文档的中文译本,为中文用户提供了详细的解释和易于理解的指导,旨在帮助开发者更好地理解和利用JDK 1.5的新功能。** 1. **泛型(Generics)** 泛型是JDK 1.5引入的最显著的...

    jdk1.5.exe jdk1.5

    jdk1.5.exe jdk1.5 jdk1.5下载

    JDK1.5,JDK1.5

    泛型是JDK1.5最重要的特性之一,它允许在类、接口和方法声明中使用类型参数,以实现数据类型的参数化。泛型提高了代码的类型安全性和可读性,减少了类型转换的需要,并允许编译器检查类型错误。 2. **自动装箱与...

    jdk 1.5 中文 api chm

    jdk 1.5 中文 api chm jdk 1.5 中文 api chm

    包含 jdk1.5免安装、jdk1.6免安装、jdk1.8(32和64)

    这个压缩包包含了三个不同版本的JDK:JDK 1.5、JDK 1.6和JDK 1.8,其中1.5和1.6是早期版本,而1.8是最流行且广泛使用的版本之一。 **JDK 1.5(也称为Java 5.0)** JDK 1.5在2004年发布,引入了许多重要的新特性,如...

    详细介绍JDK1.5的各种新特性

    以下是JDK1.5中的主要新特性及其详细解释: 1. **泛型(Generics)**:泛型是JDK1.5引入的最大变革之一。它允许在类、接口和方法中使用类型参数,提高了代码的类型安全性和重用性。泛型帮助程序员在编译时检查类型...

    简单易用通用(xls,xlsx)导入导出操作 jdk1.5+

    前几天上传过这个资源,因为是在jdk1.6上开发的, 测试了一下在jdk1.5上不能用, 今天重新用jdk1.5编译了一下, 这个是可以支持jdk1.5+的 将 pu-xlscommon-1.0.0.jar 添加到工程的 /lib 目录下 用法在附件中 XlsTest....

    window JDK1.5 32位 绿色免安装版,可以安装多个JDK使用

    标题中的"window JDK1.5 32位 绿色免安装版"指的是适用于Windows操作系统的32位版本的JDK 1.5,它是一个便携式版本,无需正式安装即可使用。这种绿色免安装版通常是为了方便开发者在不同机器间快速切换工作环境,或...

    JDK1.5中文API文档,html格式

    本篇将详细介绍JDK 1.5中文API文档的主要内容,以及这些API如何在实际编程中发挥作用。 ### 类与接口 JDK 1.5引入了泛型(Generics),这是一种强大的类型系统增强,允许开发者在定义类、接口和方法时指定类型参数...

    jdk 1.5 linux (共三个文件)之一

    测试可用的linux版jdk1.5,jdk-1_5_0_19-linux-i586-rpm.bin

    jdk1.5中文api

    《深入解析JDK1.5中文API》 Java Development Kit(JDK)是Java编程语言的核心组成部分,提供了编译、运行Java程序所需的所有工具和库。JDK 1.5,也被称为Java SE 5.0,是Java历史上的一个重大版本,引入了许多新的...

    JDK1.5最终版全平台下载

    JDK1.5 全平台安装包下载 百度网盘资源 jdk-1_5_0_22-linux-amd64-rpm.bin jdk-1_5_0_22-linux-amd64.bin jdk-1_5_0_22-linux-i586-rpm.bin jdk-1_5_0_22-linux-i586.bin jdk-1_5_0_22-solaris-amd64...

    jdk1.5 windows 64位官方正式版,绝对有效

    在JDK1.5中,最重要的变化之一是引入了泛型。泛型允许在定义类、接口和方法时指定类型参数,从而增强了类型安全性和代码重用性。通过泛型,开发者可以在编译时检查类型,避免了运行时的强制类型转换,减少了可能的...

    IBM_jdk1.5_Guide.zip_IBM jdk 1.5_aix_ibm java1.5_ibm jdk1.5 wind

    在"IBM_jdk1.5_Guide.pdf"这个文档中,很可能是IBM JDK 1.5的官方指南或开发者手册,它将详细阐述如何安装、配置和使用IBM JDK 1.5,以及如何在AIX环境下进行Java开发。而"www.pudn.com.txt"可能是下载资源的来源...

    linux下JDK1.5

    首先,安装JDK1.5在Linux系统中通常涉及以下步骤: 1. **下载**:你需要从Oracle官方网站或者第三方镜像站点下载适用于Linux操作系统的JDK1.5安装包。文件名为`linx_jdk1.5`可能就是这个安装包的名称。 2. **解压*...

    jdk1.5.zip 免费分享,哈哈

    Java Development Kit(JDK)是Java编程语言的核心组件,它包含了一个Java编译器、Java运行时环境(JRE)、调试工具和其他必要...因此,这个压缩包中的"jdk1.5.exe"可能是开发者为了兼容性或历史项目而寻找的重要资源。

Global site tag (gtag.js) - Google Analytics