首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java RowSet 完全指南:離線操作、五大標準實現、填充方式與 XML 序列化

     編輯:Java 相關知識

RowSet 繼承 ResultSet,提供離線操作、JavaBeans 支持、可序列化傳輸,是 JDBC 编程的現代化選擇。JDK 5.0 定義 5 大標準接口並提供參考實現,本文系統講解分類、填充、操作、事務、XML/序列化應用。

RowSet vs ResultSet 核心差異

特性ResultSetRowSet
連接模式僅連接連接/離線雙模式
默認屬性只前向、只讀可滾動、可更新、可序列化
JavaBeans不支持標準 JavaBeans 組件
網絡傳輸困難可序列化跨網絡傳輸
離線編輯不支持斷開修改後同步回數據源

JDK 5.0 五大標準接口與實現

接口實現類類型核心能力
JdbcRowSetJdbcRowSetImpl連接ResultSet 封裝,作 JavaBeans 用,持續持有連接
CachedRowSetCachedRowSetImpl離線最常用,內存增刪改查,同步回數據源,支持事件/分頁
WebRowSetWebRowSetImpl離線繼承 CachedRowSet,雙向 XML 轉換
FilteredRowSetFilteredRowSetImpl離線通過 Predicate 過濾數據
JoinRowSetJoinRowSetImpl離線類 SQL JOIN 合併多 RowSet(僅支持 Inner Join)

前四者均繼承 CachedRowSet,形成能力遞增體系。

四種數據填充方式

1. 直連數據庫填充

RowSet rs = new CachedRowSetImpl(); // 或 WebRowSetImpl 等
rs.setUrl("jdbc:mysql:///test");
rs.setUsername("root");
rs.setPassword("");
rs.setCommand("SELECT * FROM EMPLOYEES");
rs.execute(); // 執行查詢並填充

亦可用 setDataSourceName() 查找 JNDI DataSource。

2. 從 ResultSet 填充

ResultSet jdbcRs = stmt.executeQuery("SELECT * FROM EMPLOYEES");
CachedRowSet crs = new CachedRowSetImpl();
crs.populate(jdbcRs); // 將只前向/只讀 ResultSet 轉為可滾動可更新

3. 從 XML 填充

WebRowSet wrs = new WebRowSetImpl();
wrs.readXml(new FileReader("D:\\employees.xml")); // 需符合 WebRowSet XML Schema

4. 其他來源

CSV、Excel、HTTP 等需自行編碼填充。

數據與元數據操作

除繼承 ResultSet 方法外,RowSet 無額外操作 API,核心同 JDBC:

// 更新
rs.absolute(5);
rs.updateInt(1, 10);
rs.updateRow();

// 插入
rs.moveToInsertRow();
rs.updateInt(1, 10);
rs.insertRow();

// 刪除
rs.absolute(5);
rs.deleteRow();

// 參數化查詢
rs.setCommand("SELECT * FROM EMP WHERE ID = ?");
rs.setInt(1, 1);
rs.execute();

// 元數據
RowSetMetaData rsmd = (RowSetMetaData) rs.getMetaData();
int colCount = rsmd.getColumnCount();
int colType = rsmd.getColumnType(2);

事務與底層同步

  • JdbcRowSet:直接用連接的 commit()/rollback()
  • 離線 RowSet:修改後調用 acceptChanges(),內部由 Writer 同步回數據源

可序列化離線傳輸

CachedRowSet 可序列化,適合:

  • 服務端查詢 → 序列化 → 網絡傳輸 → 瘦客戶端(PDA/手機)反序列化使用
  • 避免客戶端部署 JDBC 驅動
  • WebRowSet 額外支持 XML 輸出,更適合 Web 異構環境

WebRowSet XML 存取示例

// 寫 XML
wrs.setCommand("SELECT id, salary, name FROM employees");
wrs.execute();
wrs.writeXml(new FileWriter("D:\\employees.xml"));

// 讀 XML
WebRowSet wrs2 = new WebRowSetImpl();
wrs2.readXml(new FileReader("D:\\employees.xml"));

標準 Schema:https://java.sun.com/xml/ns/jdbc/webrowset.xsd

總結

RowSet 以離線模型、JavaBeans 化、XML 序列化三大特性,解決 ResultSet 連接耦合、不可傳輸、不可離線編輯的痛點。CachedRowSet 是核心,WebRowSet 面向 Web/XML,Filtered/JoinRowSet 提供進階查詢能力。選型原則:默認用 CachedRowSet,需 XML 用 WebRowSet,需過濾/連接用對應實現。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved