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

DB2 UDB 8.2 Java 支援全面升級:Universal JDBC Driver、JDBC 3.0 新特性與 Eclipse 開發實戰

     編輯:DB2 教學

核心升級:Universal JDBC Driver 成為戰略標準

DB2 UDB 8.1 引入 Universal JDBC Driver 統一支援 JDBC/SQLJ;8.2 版本達到里程碑:

  • 完整支援分散式事務 (XA)
  • JDBC 3.0 API 全相容
  • 驅動級可服務性與效能增強
  • 新增 可保持游標 (Holdable Cursors) 與 保存點
  • Java 應用監控簡化:新 SQL 函數直取 DB2 伺服器端效能指標

連接模式選擇:Type 4 vs Type 2

模式通訊方式部署依賴適用場景
Type 4 (Pure Java)TCP/IP 直連 DB2無原生庫,隨應用打包遠程連接、跨平台、雲原生 — 首選
Type 2 (Native)IPC 共享記憶體 + 原生庫需安裝 DB2 Client/共享庫同一邏輯主機、Java 預存程序 (無 TCP/IP)

伺服器端 TCP/IP 啟用檢查清單

db2set DB2COMM=TCPIP
db2 update dbm cfg using SVCENAME <tcp/ip service name>

SVCENAME 需對應 `/etc/services` (或 Windows 同類) 定義的埠號。

Java 連接範本:DriverManager + URL / Properties 兩種風格

Style 1: URL 內嵌認證

Class.forName("com.ibm.db2.jcc.DB2Driver");
Connection conn = DriverManager.getConnection(
    "jdbc:db2://localhost:50000/sample", "testuser", "testpassword");

Style 2: Properties 物件外部化配置

Properties props = new Properties();
props.put("user", "testuser");
props.put("password", "testpassword");
Connection conn = DriverManager.getConnection(
    "jdbc:db2://localhost:50000/sample", props);

部署提醒:Classpath 需 db2jcc.jar + 授權檔 db2jcc_license_cu.jar (LUW) 或 db2jcc_license_cisuz.jar (z/OS 連接)。

Eclipse 2.1 整合開發實戰

  1. New Java Project
  2. Properties → Java Build Path → Libraries → Add External JARs → 選 db2jcc.jar、db2jcc_license_cu.jar
  3. 撰寫測試類,Run As → Java Application 即時驗證

Eclipse 加入 JDBC Driver

創新:SQL 函數直取伺服器端執行時間 — 開發期效能基準新利器

DB2 8.2 新增 SNAPSHOT_APPL_INFO、SNAPSHOT_APPL 表函數,配合 tpmon_client_app 應用標識,開發人員無需 DBA 工具即可量測:

WITH t1 AS (
  SELECT * FROM TABLE(SNAPSHOT_APPL_INFO('SAMPLE',-1))
  WHERE tpmon_client_app = 'Payroll Module'
)
SELECT elapsed_exec_time_ms
FROM TABLE(SNAPSHOT_APPL('SAMPLE',-1))
WHERE (SELECT agent_id FROM t1) = agent_id;
-- 回傳 77 ms

進階:同時量測應用端耗時與伺服器端耗時,剖析網路佔比:

Query elapsed time from application: 30 ms
Total query execution time on DB2 server: 22 ms

權限需求:執行快照函數需 SYSCTRL 或更高權限。

錯誤診斷增強:DB2Diagnosable 介面揭露 SQLCA 細節

故意設置錯誤 currentSchema=FRED 觸發異常,捕獲 DB2Diagnosable 可見完整 SQLCA 結構:錯誤碼、錯誤訊息、失效物件引用 (FRED.STAFF) 等,等同嵌入式 C 時代的 SQLCA 視覺化。

DB2Diagnosable 錯誤資訊

JDBC 3.0 三大新特性深度解析

1. 可更新結果集

  • JDBC 1.0 唯讀;2.0 引入 CONCUR_UPDATABLE;3.0 標準化
  • API:updateXXX(String columnName, xxx value) / updateXXX(int columnIndex, xxx value)
  • 修改後必呼叫 updateRow() 持久化
  • 範例:遍歷結果集將 `middleInitial` 全改為 `S.`
ResultSet rs = stmt.executeQuery("SELECT firstName, middleInitial, lastName FROM applicants");
while (rs.next()) {
    rs.updateString(2, "S.");
    rs.updateRow();
}

2. 事務保存點 — 打破 All-or-Nothing

  • conn.setAutoCommit(false) 開啟手動事務控制
  • Savepoint sp = conn.setSavepoint("SavePoint1") 設標記
  • conn.rollback(sp) 回滾至標記,保留之前操作
  • 可結合布林邏輯構建複雜業務事務流
conn.setAutoCommit(false);
stmt.executeUpdate(sql1); stmt.executeUpdate(sql2);
Savepoint sp = conn.setSavepoint("SP1");
stmt.executeUpdate(sql3); stmt.executeUpdate(sql4);
conn.rollback(sp);  // 僅保留 sql1+sql2
conn.commit();

3. 游標保持能力 — Commit 不關游標

  • 傳統:Commit 自動關閉所有 ResultSet 游標
  • JDBC 3.0:conn.createStatement(ResultSet.HOLD_CURSORS_OVER_COMMIT)
  • 效用:批次更新中釋放資料庫鎖供其他交易讀取,應用端繼續處理結果集

總結與資源

Universal JDBC Driver 是 DB2 家族戰略核心。本文涵蓋驅動選型、連接範本、Eclipse 整合、伺服器端計時 SQL、錯誤診斷、JDBC 3.0 三大新特性。完整範例碼、驅動文檔、Information Center 搜尋指南請參考原文 Resources 區。

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