【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的简单示例。
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种必须实现的方法。它们如下:
1) public void cursorMoved(RowSetEvent event);
2) public void rowChanged(RowSetEvent event);
3) public void rowSetChanged(RowSetEvent event);
让我们编写代码以检索数据并在移动光标, 更改光标或更改行集的同时执行一些其他任务。无法使用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...
推荐阅读
- Java连接Oracle数据库
- Java与MySQL数据库的连接
- Java DatabaseMetaData接口
- Java DriverManager类
- Java无需DSN即可访问的连接
- Java CallableStatement接口
- Java连接interface
- Java中的序列化和反序列化
- JDBC中的批处理