Linux、UNIX、Windows 平台上的 DB2 UDB 8.2 支援多種 Java 程式類型,含客戶端應用、應用伺服器與 DB2 伺服器端的預存程序或使用者定義函數。IBM 引入 DB2 Universal JDBC Driver 支援 JDBC 與 SQLJ(Java 內嵌 SQL)程式設計。v8.2 版驅動完整支援分散式交易、JDBC 3.0 API、驅動專屬服務性與效能增強。新 JDBC 特性含增強結果集處理(可保持游標支援)與儲存點。Java 應用監控大幅簡化,得益於新 SQL 函數可取得 DB2 伺服器效能資訊。本文示範啟用新 JDBC 驅動、在 Java 應用中取得 DB2 伺服器資訊、在 Eclipse 中建構 DB2 Java 應用。
最新 Java 程式規範由 J2EE 1.4 定義,要求透過遵循 JDBC 3.0 的驅動存取 RDBMS。DB2 Universal JDBC Driver 支援 Type 4 與 Type 2 連線模式:
使用 DB2 Universal JDBC Driver 連線 DB2 UDB 伺服器,需確保伺服器支援 TCP/IP 連線:
db2set DB2COMM=TCPIPdb2 update dbm cfg using SVCENAME <tcp/ip service name>安裝期間應正確設定;若初始連線有問題,優先檢查這兩項。SVCENAME 應對應伺服器機器服務檔中定義的連接埠。
JDBC 由 J2SE 規範定義為 DB2 動態 SQL 介面。Java 內建類別與介面,但無 DB2 JDBC 驅動,應用需載入理解與 DB2 互動的類別:
Class.forName("com.ibm.db2.jcc.DB2Driver")
成功載入驅動後,使用 DriverManager.getConnection 連線,URL 嵌入 Java 屬性配置,或使用可配置的 JDBC 2 資料源實例。範例連線 URL:jdbc:db2://localhost:50000/sample(主機 localhost、連接埠 50000、資料庫 SAMPLE)。
清單 1 展示建立連線、查詢 GHUTCHIS.STAFF 表、以欄位名或位置檢索結果。JDBC 驅動包含於 db2jcc.jar;授權檔視目標平台而定(Windows 用 db2jcc_license_cu.jar,z/OS 用 db2jcc_license_cisuz.jar)。
亦可使用 Properties 物件分離連線細節與原始碼,簡化新環境部署(清單 2)。
Eclipse 為易用的開源整合開發環境(IDE),成許多 IBM 軟體產品基礎。本文示範使用 Eclipse 2.1 建構簡單 DB2 UDB 8.2 JDBC 應用:




DB2 UDB 8.2 提供新 SQL 管理函數取得伺服器效能資訊。清單 3 展示收集 SQL 查詢在伺服器執行時間:使用 snapshot_appl_info 與 snapshot_appl 表函數,透過 clientApplicationInformation 識別應用模組(如 "Payroll Module"),取得 elapsed_exec_time_ms(範例 77 毫秒)。
清單 4 修改程式同時取得應用端耗時與伺服器端執行時間,範例輸出:應用端 30ms、伺服器端 22ms。新 SQL 函數讓開發人員清楚掌握網路傳輸與查詢執行各自佔比。注意:執行快照 SQL 函數需具備實例上的 SYSCTRL 或更高權限。
錯誤處理:DB2 Universal JDBC Driver 提供基本 SQL 例外資訊與 DB2 伺服器錯誤細節。修改應用列印 DB2Diagnosable 物件細節,透過設定不存在的 currentSchema 引入 SQL 錯誤,圖 5 展示 DB2 SQLCA 資料結構與無效物件引用訊息。

JDBC 1.0 僅支援 CONCUR_READ_ONLY;JDBC 2.0 引入 CONCUR_UPDATABLE,允許用 Java 碼而非 SQL 更新結果集。透過 ResultSet.updateXX() 方法(依欄位名或索引)便利更新,呼叫 updateRow() 持久化變更。清單 5 示範更新申請人表中間名初始。早期 DB2 JDBC 驅動需顯式游標更新,新用法更直觀。
儲存點讓開發者將更新成組套用至資料庫,突破早期 all-or-nothing 限制。儲存點為應用程式標記,可依邏輯回滾至該點。須將 Connection 自動提交模式設為 OFF(setAutoCommit(false))。清單 6 示範:關閉自動提交 → 執行兩次更新 → 定義 SavePoint1 → 再執行兩次更新 → rollback(savePoint) 回滾至前兩次更新後狀態 → commit()。回滾可結合布林邏輯設計複雜業務交易。
JDBC 3.0 前,提交交易時交易期間建立的 ResultSet 游標自動關閉。JDBC 3.0 可撤銷此效果:將 ResultSet.HOLD_CURSORS_OVER_COMMIT 常數提供給 createStatement 或 prepareStatement。可對結果集記錄執行一組更新、提交變更釋放伺服器鎖定,讓其他應用看見修改資料,同時繼續處理 ResultSet。
DB2 Universal JDBC Driver 為 DB2 家族戰略組成。本文僅略述 v8.2 部分 JDBC 增強。完整程式碼範例與文件見《Application Development Guide: Programming Client Applications》。新基於 Eclipse 技術的 DB2 UDB 8.2 Information Center 提供優異搜尋功能。