.5学习之RowSet(二)
continue.....
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接口:
.NET的ADO.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;
else return false;
}
}
下面我们就使用这个过滤器来过滤掉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都可以装载进来。
结语:
五个RowSet接口里面分别都还有一些方法,由于篇幅有限,我只列出了其中一些典型的方法,希望本文对大家进一步学习jdk1.5有所帮助!
continue.....
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接口:
.NET的ADO.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;
else return false;
}
}
下面我们就使用这个过滤器来过滤掉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都可以装载进来。
结语:
五个RowSet接口里面分别都还有一些方法,由于篇幅有限,我只列出了其中一些典型的方法,希望本文对大家进一步学习jdk1.5有所帮助!