雖然 DB2 原生 XML 支持是新特性,但優秀的數據庫應用編程原則始終通用:
DB2 Viper 隨附基於 Eclipse 3.1 的 Developer Workbench (DWB)。配置步驟:
db2jcc.jar、db2jcc_javax.jar、db2jcc_license_cu.jar。本教程使用 clients 表,包含 contactinfo XML 列:
create table clients(
id int primary key not null,
name varchar(50),
status varchar(10),
contactinfo XML
)
示例 XML 文檔結構包含 Address、phone、fax、email 等層次化元素。
雖然示例數據量小無需調整,但生產環境需關注:日誌大小 (LOGFILSIZ/LOGPRIMARY)、Java 堆 (JAVA_HEAP_SZ)、查詢語句堆 (STMTHEAP)、應用程序堆 (APPLHEAPSZ)。參數不當會導致大 XML 文檔插入失敗或性能低下。可通過 Control Center 或 CLP 修改。
連接邏輯與傳統 DB2 無異,封裝 Conn 工具類提供 getConn()/closeConn() 方法,採用 com.ibm.db2.jcc.DB2Driver 驅動。
使用 PreparedStatement.setBinaryStream() 讀取文件流,標準 SQL INSERT 語法:
String query = "insert into clients (id, name, status, contactinfo) values (?, ?, ?, ?)";
PreparedStatement stmt = conn.prepareStatement(query);
stmt.setInt(1, id);
stmt.setString(2, name);
stmt.setString(3, status);
File file = new File(xmlFilePath);
stmt.setBinaryStream(4, new FileInputStream(file), (int)file.length());
stmt.executeUpdate();
僅需修改 INSERT 語句,調用 XMLVALIDATE 函數:
String query = "INSERT INTO clients (id, name, status, contactinfo) " +
"VALUES (?, ?, ?, xmlvalidate(? according to XMLschema id user1.mysample))";
驗證失敗將導致整條語句回滾,保證數據完整性。
改用 setString() 綁定 XML 字符串,注意轉義引號:
String xml = "<?xml version=\"1.0\"?><Client>...</Client>";
stmt.setString(4, xml);
同文件驗證,只需在 VALUES 子句中包裹 xmlvalidate()。
下篇將深入講解 XML 數據查詢、更新、刪除及存儲過程開發。