在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);
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);
JdbcRowSet jrs=new JdbcRowSetImpl();
jrs.setUrl(“jdbc:mydql://localhost:3306/test”);
jrs.setUsername(“root”);
jrs.setPassword(“”);
jrs.setCommand(“select * from table1”);
jrs.execute();
JdbcRowSet jrs=new JdbcRowSetImpl();
jrs.setDataSourceName(“dataSource1”)
jrs.execute();
String provider= “com.fred.providers.HighAvailabilityProvider”
CachedRowSet crs=new CachedRowSetImpl(provider);
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”));
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”);
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) return true;
else return false;
}
}
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都可以装载进来。