原文地址: http://www.yiidian.com/jdbc/jdbc-jdbcrowset.html
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
来源:https://www.cnblogs.com/yiidian/p/12529347.html