查看原文
其他

Java教程-JDBC RowSet

点击关注👉 鸭哥聊Java 2023-08-31

整理:Java面试那些事儿


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的实现进行了标准化。


专属福利

👉点击领取:651页Java面试题库


RowSet接口的实现类如下:

  • JdbcRowSet

  • CachedRowSet

  • WebRowSet

  • 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的优点


使用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: 55Name: Om BhimSalary: 70000Id: 190Name: abhiSalary: 40000Id: 191Name: umeshSalary: 50000


带有事件处理的JDBC RowSet示例


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


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

  • public void cursorMoved(RowSetEvent event);

  • public void rowChanged(RowSetEvent event);

  • 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: 55Name: Om BhimSalary: 70000Cursor Moved...Id: 190Name: abhiSalary: 40000Cursor Moved...Id: 191Name: umeshSalary: 50000Cursor Moved...


 
最近技术热文

我就知道你会点赞+“在看”

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存