在JDBC中使用RowSet

原文地址: http://www.yiidian.com/jdbc/j...html

1 什么是JDBC的RowSet?

与ResultSet相比,RowSet默认是可滚动、可更新、可序列化的结果集,并且做为JavaBean使用,所以能方便的在网络上传输,用于同步两端的数据,对于离线RowSet而言,程序在建立RowSet时已经把数据从底层数据库读取到了内存,所以能够充分利用计算机的内存,从而下降数据库服务器的负载,提升程序性能。RowSet接口继承了ResultSet接口。java

RowSet接口的实现类以下:mysql

  • JdbcRowSet
  • CachedRowSet
  • WebRowSet
  • JoinRowSet
  • FilteredRowSet

2 RowSet的好处

使用RowSet的优势以下:sql

  • 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 运行测试

file

5 有事件监听的RowSet示例

要使用JdbcRowSet执行事件处理,您须要在JdbcRowSet的addRowSetListener() 方法中添加RowSetListener的实例。segmentfault

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 运行测试

file

file

欢迎关注个人公众号::一点教程。得到独家整理的学习资源和平常干货推送。
若是您对个人系列教程感兴趣,也能够关注个人网站: yiidian.com
相关文章
相关标签/搜索