JDBC RowSet

RowSet的实例是Java bean组件,因为它具有属性和Java bean通知机制。它是ResultSet的包装器。JDBC RowSet提供了一种在表格形式中保持数据的机制。与ResultSet相比,它使数据更灵活、更容易处理。数据源和RowSet对象之间的连接在其生命周期内保持。RowSet支持基于组件的开发模型,例如JavaBeans,具有标准的属性集和事件通知机制。

在JDBC 2.0中引入了对RowSet的支持,使用了可选包。但是,在JDK(Java开发工具包)5.0中,Sun Microsystems通过JDBC RowSet Implementations Specification(JSR-114)对RowSet的实现进行了标准化。

RowSet接口的实现类如下:

  • JdbcRowSet
  • CachedRowSet
  • WebRowSet
  • JoinRowSet
  • FilteredRowSet

java-rowset.jpg

让我们看看如何创建和执行RowSet。

1. JdbcRowSet rowSet = RowSetProvider.newFactory().createJdbcRowSet(); 
2. rowSet.setUrl("jdbc:oracle:thin:@localhost:1521:xe"); 
3. rowSet.setUsername("system"); 
4. rowSet.setPassword("oracle"); 
5.       
6. rowSet.setCommand("select * from emp400"); 
7. rowSet.execute(); 

这是从JDK 7开始获取JdbcRowSet实例的新方式。

RowSet的优点

使用RowSet的优点如下:

  1. 使用简单灵活。
  2. 默认情况下,它是可滚动和可更新的。

JdbcRowSet的示例

让我们看一个简单的JdbcRowSet示例,不包含事件处理代码。

文件名:RowSetExample.java

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.sql.RowSetEvent;
import javax.sql.RowSetListener;
import javax.sql.rowset.JdbcRowSet;
import javax.sql.rowset.RowSetProvider;

public class RowSetExample {
    public static void main(String[] args) throws Exception {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        
        // 创建和执行RowSet
        JdbcRowSet rowSet = RowSetProvider.newFactory().createJdbcRowSet();
        rowSet.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
        rowSet.setUsername("system");
        rowSet.setPassword("oracle");
        
        rowSet.setCommand("select * from emp400");
        rowSet.execute();
        
        while (rowSet.next()) {
            // 生成游标移动事件
            System.out.println("Id: " + rowSet.getString(1));
            System.out.println("Name: " + rowSet.getString(2));
            System.out.println("Salary: " + rowSet.getString(3));
        }
    }
}

输出如下:

Id: 55
Name: Om Bhim
Salary: 70000
Id: 190
Name: abhi
Salary: 40000
Id: 191
Name: umesh
Salary: 50000

带有事件处理的JDBC RowSet示例

要在JdbcRowSet中执行事件处理,需要将RowSetListener实例添加到JdbcRowSet的addRowSetListener方法中。

RowSetListener接口提供了必须实现的3个方法,它们如下:

  1. public void cursorMoved(RowSetEvent event);
  2. public void rowChanged(RowSetEvent event);
  3. public void rowSetChanged(RowSetEvent event);

让我们编写代码来检索数据,并在光标移动、光标更改或行集更改时执行一些附加任务。现在不再使用ResultSet执行事件处理操作。

文件名:RowSetExample.java

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.sql.RowSetEvent;
import javax.sql.RowSetListener;
import javax.sql.rowset.JdbcRowSet;
import javax.sql.rowset.RowSetProvider;

public class RowSetExample {
    public static void main(String[] args) throws Exception {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        
        // 创建和执行RowSet
        JdbcRowSet rowSet = RowSetProvider.newFactory().createJdbcRowSet();
        rowSet.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
        rowSet.setUsername("system");
        rowSet.setPassword("oracle");
        
        rowSet.setCommand("select * from emp400");
        rowSet.execute();
        
        // 添加监听器并移动RowSet
        rowSet.addRowSetListener(new MyListener());
        
        while (rowSet.next()) {
            // 生成游标移动事件
            System.out.println("Id: " + rowSet.getString(1));
            System.out.println("Name: " + rowSet.getString(2));
            System.out.println("Salary: " + rowSet.getString(3));
        }
    }
}

class MyListener implements RowSetListener {
    public void cursorMoved(RowSetEvent event) {
        System.out.println("Cursor Moved...");
    }
    public void rowChanged(RowSetEvent event) {
        System.out.println("Cursor Changed...");
    }
    public void rowSetChanged(RowSetEvent event) {
        System.out.println("RowSet changed...");
    }
}

输出如下:

Cursor Moved...
Id: 55
Name: Om Bhim
Salary: 70000
Cursor Moved...
Id: 190
Name: abhi
Salary: 40000
Cursor Moved...
Id: 191
Name: umesh
Salary: 50000
Cursor Moved...

标签: java, Java面试题, Java下载, java教程, java技术, Java学习, Java学习教程, Java语言, Java开发, Java入门教程, Java进阶教程, Java高级教程, Java笔试题, Java编程思想