com.ibm.db2.jcc.DB2Driver (db2jcc.jar + db2jcc_license_cu.jar)CREATE TABLE XMLTABLE (ID INT, CONTENT XML)INSERT INTO XMLTABLE VALUES (2, XMLPARSE(DOCUMENT '<root><book><name>Java</name></book></root>'))package X2R2D;
import java.sql.*;
public class DataBase {
private Connection conn = null;
private Statement stmt = null;
public boolean openConn() throws Exception {
try {
Class.forName("com.ibm.db2.jcc.DB2Driver");
String url = "jdbc:db2://<host>:50000/<db>";
String user = "<user>";
String password = "<pwd>";
conn = DriverManager.getConnection(url, user, password);
return true;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
public boolean openStatement() throws SQLException {
stmt = conn.createStatement();
return true;
}
public ResultSet getQuery(String sql) throws Exception {
return stmt.executeQuery(sql);
}
public boolean closeConn() throws SQLException {
if (conn != null) conn.close();
return true;
}
public static void main(String[] args) throws Exception {
DataBase db = new DataBase();
db.openConn();
db.openStatement();
// XQuery: 擷取所有 book 的 name 文字節點
String sql = "SELECT ID, " +
"XMLQUERY('for $e in $d/root/book return $e/name/text()' " +
"PASSING CONTENT AS \"d\") " +
"FROM XMLTABLE " +
"WHERE ID = 2";
ResultSet rs = db.getQuery(sql);
while (rs.next()) {
System.out.println("ID: " + rs.getInt(1) + " Name: " + rs.getString(2));
}
db.closeConn();
}
}
PASSING 子句將 XML 欄位綁定給變數 $d。/root/book 定位節點,name/text() 取文字內容。XMLQUERY 回傳 XML 序列,JDBC getString() 會序列化為字串;若需結構化處理可用 getSQLXML() (JDBC 4.0+)。declare namespace ns="...";。SELECT X.*
FROM XMLTABLE,
XMLTABLE('for $b in $d/root/book return $b'
PASSING CONTENT AS "d"
COLUMNS
BOOK_NAME VARCHAR(100) PATH 'name/text()',
PRICE DECIMAL(10,2) PATH 'price/text()') AS X
WHERE ID = 2
將 XML 節點直接「炸開」為關聯式行集,方便後續 JOIN、聚合分析。