1 什么是JDBC的RowSet?
与ResultSet相比,RowSet默认是可滚动、可更新、可序列化的结果集,而且作为JavaBean使用,因此能方便的在网络上传输,用于同步两端的数据,对于离线RowSet而言,程序在创建RowSet时已经把数据从底层数据库读取到了内存,因此可以充分利用计算机的内存,从而降低数据库服务器的负载,提高程序性能。RowSet接口继承了ResultSet接口。
RowSet接口的实现类如下:
JdbcRowSet
CachedRowSet
WebRowSet
JoinRowSet
FilteredRowSet
2 RowSet的好处
使用RowSet的优点如下:
RowSet扩展了ResultSet接口,因此它的功能比ResultSet更加强大。
RowSet对表数据的遍历更加灵活,可前后滚动。
RowSet支持缓存数据,即在Connection关闭后也可以使用。
RowSet支持新的连接方式,无需Connection即可连接数据库,还支持读取XML数据源。
RowSet支持Filter(过滤数据)。
RowSet还支持表的Join操作。
3 RowSet核心代码示例
JdbcRowSet rowSet = RowSetProvider.newFactory().createJdbcRowSet();
rowSet.setUrl("jdbc:mysql://localhost:3306/test");
rowSet.setUsername("root");
rowSet.setPassword("root");
rowSet.setCommand("select * from t_user");
rowSet.execute();
4 没有事件监听的RowSet示例
4.1 编写测试类
NoListenerRowSetDemo:
package com.yiidian;
import javax.sql.rowset.JdbcRowSet;
import javax.sql.rowset.RowSetProvider;
import java.io.*;
import java.sql.*;
/**
* 一点教程网 - http://www.yiidian.com
*/
public class NoListenerRowSetDemo {
public static void main(String args[])throws Exception {
Class.forName("com.mysql.jdbc.Driver");
JdbcRowSet rowSet = RowSetProvider.newFactory().createJdbcRowSet();
rowSet.setUrl("jdbc:mysql://localhost:3306/test");
rowSet.setUsername("root");
rowSet.setPassword("root");
rowSet.setCommand("select * from t_user");
rowSet.execute();
//移动光标,获取记录
while (rowSet.next()) {
System.out.print("编号: " + rowSet.getInt(1)+"\t");
System.out.print("名称: " + rowSet.getString(2)+"\t");
System.out.print("密码: " + rowSet.getString(3));
System.out.println();
}
}
}
4.2 运行测试
5 有事件监听的RowSet示例
要使用JdbcRowSet执行事件处理,您需要在JdbcRowSet的addRowSetListener() 方法中添加RowSetListener的实例。
RowSetListener接口提供3种必须实现的方法:
public void cursorMoved(RowSetEvent event);
public void rowChanged(RowSetEvent event);
public void rowSetChanged(RowSetEvent event);
5.1 编写测试类
HasListenerRowSetDemo:
package com.yiidian;
import javax.sql.RowSetEvent;
import javax.sql.RowSetListener;
import javax.sql.rowset.JdbcRowSet;
import javax.sql.rowset.RowSetProvider;
import java.io.*;
import java.sql.*;
/**
* 一点教程网 - http://www.yiidian.com
*/
public class HasListenerRowSetDemo {
public static void main(String args[])throws Exception {
Class.forName("com.mysql.jdbc.Driver");
JdbcRowSet rowSet = RowSetProvider.newFactory().createJdbcRowSet();
rowSet.setUrl("jdbc:mysql://localhost:3306/test");
rowSet.setUsername("root");
rowSet.setPassword("root");
rowSet.setCommand("select * from t_user");
rowSet.execute();
//给RowSet添加事件监听处理
rowSet.addRowSetListener(new MyListener());
//移动光标,获取记录
while (rowSet.next()) {
System.out.print("编号: " + rowSet.getInt(1)+"\t");
System.out.print("名称: " + rowSet.getString(2)+"\t");
System.out.print("密码: " + rowSet.getString(3));
System.out.println();
}
}
}
//事件监听处理类
class MyListener implements RowSetListener {
public void cursorMoved(RowSetEvent event) {
System.out.println("光标移动...");
}
public void rowChanged(RowSetEvent event) {
System.out.println("光标改变...");
}
public void rowSetChanged(RowSetEvent event) {
System.out.println("RowSet改变...");
}
}
5.2 运行测试
欢迎关注我的公众号::一点教程。获得独家整理的学习资源和日常干货推送。
如果您对我的系列教程感兴趣,也可以关注我的网站:yiidian.com