📜  Java JDBC RowSet接口

📅  最后修改于: 2020-10-13 01:54:58             🧑  作者: Mango

JDBC行集

RowSet实例是Java Bean组件,因为它具有属性和Java Bean通知机制。自JDK 5起引入。

它是ResultSet的包装器。它包含诸如ResultSet之类的表格数据,但使用起来既简单又灵活。

RowSet接口的实现类如下:

  • JdbcRowSet
  • CachedRowSet
  • Web行集
  • JoinRowSet
  • FilteredRowSet

让我们看看如何创建和执行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();

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

行集的优势

使用RowSet的优点如下:

  • 使用简便灵活
  • 默认情况下它是可滚动和可更新的

JdbcRowSet的简单示例

让我们看一下没有事件处理代码的JdbcRowSet的简单示例。

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");

//Creating and Executing 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()) {
                        // Generating cursor Moved event
                        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执行事件处理,需要在JdbcRowSet的addRowSetListener方法中添加RowSetListener的实例。

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

让我们编写代码来检索数据并在移动光标,更改光标或更改行集的同时执行一些其他任务。无法使用ResultSet执行事件处理操作,因此现在首选。

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");

//Creating and Executing 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();
                 
//Adding Listener and moving RowSet
rowSet.addRowSetListener(new MyListener());

                 while (rowSet.next()) {
                        // Generating cursor Moved event
                        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...