首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 9 Java 應用開發新特性:XML 整合、JDBC 驅動與類別載入器增強

     編輯:DB2 教學

前言:DB2 9 的混合引擎與 Java 開發

DB2 9 for Linux, UNIX, and Windows(原代號 Viper)引入混合引擎,便利 XML 與關聯資料整合。本文聚焦對 Java 應用開發至關重要的新特性。

Java 5.x 全面支援

DB2 9 在多平台支援 Java 5.x,開發者可利用 Unicode 增補字元支援、增強 for 迴圈、泛型、型別安全列舉、可變參數等新特性開發 DB2 Java 應用與 Java 例程。

DB2 Driver for JDBC and SQLJ 成為預設驅動

DB2 9 中 DB2 Driver for JDBC and SQLJ(JCC 驅動)為 Java 應用預設驅動。DB2 JDBC Type 2 驅動不再推薦,Type 3 驅動已棄用。若欲用 JCC 驅動作為 Java 例程執行期預設驅動,可設定登錄變數 DB2_USE_DB2JCCT2_JROUTINE=ON(預設未設定)。

隨 DB2 9 發布的增強版 JCC 驅動遵循 JDBC 3.0 規範,新增支援:

  • XML 欄位資料型別、XQuery
  • 更新與檢索 XML 欄位資料的新方法
  • 帶 XML 參數的預存程序呼叫
  • 註冊 XML Schema 與建立受信連線的新 DB2 方法

JDBC 標準尚未包含原生 XML 型別,DB2 9 將 XML 欄位映射為 Java String、byte 陣列、Stream 及新的 com.ibm.db2.jcc.DB2Xml 型別。表 1 列出插入/更新 XML 欄位的方法與輸入型別;表 2 列出檢索 XML 資料的方法、輸出型別與編碼宣告差異(DB2Xml.getDB2XmlXXX 含 XML 宣告與編碼,DB2Xml.getDB2XXX 不含)。

實戰範例:SAMPLE 資料庫 XML 操作

範例使用 Unicode 建立的 SAMPLE 資料庫,執行 db2sampl_XML.db2 腳本建立表、插入 XML 資料、註冊 XML Schema。CUSTOMER 表定義含兩個 XML 欄位 Info、History。

InsertSelect.java 應用程式示範:

  1. 呼叫 ResultSetMetaData.getColumnTypeName 取得 XML 欄位型別
  2. 插入客戶 ID 1006,以 XMLVALIDATE 函數驗證 customer1006.xml 檔案資料寫入 Info 欄
  3. 使用 ResultSet.getObject 與 DB2Xml.getDB2XmlString 透過 XQuery 檢索所有客戶姓名

驅動會在輸出中加入 ISO-10646-UCS-2 編碼宣告。

Java 預存程序與 XML 參數

DB2 9 支援在 Java 預存程序中回傳 XML 結果集或使用 XML 參數。範例展示以 XQuery 檢索 XML 資料並以 DB2XML 輸出參數回傳值,查詢居住於安大略省 Markham 的客戶資訊。

Java 例程類別載入器重大重設計

DB2 UDB V8 問題:僅支援整個實例中單一同名 Java 類別檔案。類別載入器搜尋 CLASSPATH 指定的 JAR,選擇首個遇到的同名類別。若不同路徑存在同名類別的不同 JAR,DB2 僅載入一個類別,卻可能非對應例程所需類別,導致錯誤結果。衝突源於例程主體通常存放於 sqllib/function 目錄(實例中所有資料庫共用),且類別解析期間未使用 JAR ID。

DB2 9 解決方案:Java 類別載入器重新設計。每當請求選擇載入類別時,必須提供 JAR ID 與類別 ID,載入器嘗試在指定 JAR 中尋找類別,確保總是載入正確類別。指定 JAR ID 亦能提升搜尋效能。

CREATE PROCEDURE 的 EXTERNAL NAME 子句可指定 JAR ID、類別 ID、方法 ID。發出陳述式時類別與方法可不存在,但呼叫預存程序時必須存在且可被資料庫伺服器存取,否則報錯(SQLSTATE 42884)。若指定 JAR ID,發出陳述式時該 JAR 必須已存在。未指定 JAR ID 時維持 V8 不確定載入行為。

實測 QUERYSTAFF 與 QUERYORG 兩個預存程序(同類別名 Query、不同 JAR)在 DB2 9 中正確載入對應類別,V8 中會載入錯誤類別導致輸出截斷。

最佳實踐:將類別檔案打包至 JAR,在 EXTERNAL NAME 指定 JAR ID。若已有 JAR 但未指定 JAR ID,可用 ALTER PROCEDURE 或 ALTER FUNCTION 新增/修改 JAR ID 欄位。

延伸學習

本文介紹 DB2 9 多項 Java 應用支援特性,更多細節請參考官方文件。

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