其他
Java教程-JDBC RowSet
整理: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的实现进行了标准化。
专属福利
RowSet接口的实现类如下:
JdbcRowSet
CachedRowSet
WebRowSet
JoinRowSet
FilteredRowSet
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的优点如下:
使用简单灵活。
默认情况下,它是可滚动和可更新的。
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个方法,它们如下:
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: 55
Name: Om Bhim
Salary: 70000
Cursor Moved...
Id: 190
Name: abhi
Salary: 40000
Cursor Moved...
Id: 191
Name: umesh
Salary: 50000
Cursor Moved...
我就知道你会点赞+“在看”