JDBC 規範定義四類驅動:Type 1 (JDBC-ODBC Bridge)、Type 2 (Native API)、Type 3 (Network Protocol)、Type 4 (Pure Java)。IBM DB2 歷史上提供 Type 2、3、4 三種 (Type 1 從未提供),理解其架構差異對部署架構、性能調優、故障排查至關重要。
COM.ibm.DB2.jdbc.app.DB2Driver (包含於 DB2Java.zip)DB2JDBC.dll / libdb2jcc.so),即 必須安裝完整 DB2 Client。Class.forName("COM.ibm.DB2.jdbc.app.DB2Driver").newInstance();
String url = "jdbc:db2:SAMPLE"; // 使用本地編錄別名
Connection con = DriverManager.getConnection(url, user, password);
COM.ibm.DB2.jdbc.Net.DB2Driver (包含於 DB2Java.zip)DB2JSTR 進程監聽 6789 端口。Class.forName("COM.ibm.DB2.jdbc.Net.DB2Driver").newInstance();
String url = "jdbc:db2://db2_host:6789/SAMPLE";
Connection con = DriverManager.getConnection(url, user, password);
com.ibm.db2.jcc.DB2Driver (包含於 db2jcc.jar / db2jcc4.jar)db2jcc.jar:JDBC 3.0 / JDK 1.4~1.6db2jcc4.jar:JDBC 4.0+ / JDK 1.6+ (含 java.sql.RowId, NClob, XML 等新類型支援)clientEncoding 連接屬性可緩解)。svcename 配置)。Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();
String url = "jdbc:db2://db2_host:50000/SAMPLE:user=db2user;password=db2pwd;";
Connection con = DriverManager.getConnection(url);
| 屬性 | 說明 | 建議值 |
|---|---|---|
| currentSchema | 默認模式,避免非限定名解析開銷 | APP_SCHEMA |
| clientEncoding | 客戶端字符集 (解決非 UTF-8 庫連接問題) | UTF-8 / GBK / ISO-8859-1 |
| enableExtendedIndicators | 支援 DEFAULT/UNASSIGNED 參數標記 | true |
| progressiveStreaming | LOB 流式讀取,減少內存佔用 | 2 (ON) |
| sslConnection | 啟用 SSL/TLS 加密傳輸 | true (生產環境) |
| maxTransportObjects | 傳輸對象池大小 (高併發調大) | 100+ |
| 維度 | Type 2 | Type 3 | Type 4 (JCC) |
|---|---|---|---|
| 部署複雜度 | 高 (需 Client) | 中 (需 App Server) | 極低 (單 JAR) |
| 平台獨立性 | 差 (原生庫) | 好 | 最佳 (純 Java) |
| 性能 (本地) | 最優 (繞過網絡層) | 中 (雙跳) | 優 (直連,JIT 優化) |
| 主機訪問 (z/OS/i) | 需 DB2 Connect | 需 DB2 Connect | 直連 (內建 DRDA) |
| 容器化/雲原生 | 不適合 | 不適合 | 原生支援 |
| 維護狀態 | 僅修補 | 僅修補 | 主力開發 |
db2jcc4.jar (JDBC 4.2+),Maven 坐標:com.ibm.db2:jcc:11.5.x。maximumPoolSize、idleTimeout、connectionTimeout。db2.jcc.override.traceFile 追蹤準備語句緩存命中率;複雜報表查詢顯式使用 PreparedStatement。SQLException 並解析 getErrorCode() (DB2 SQLCODE) 與 getSQLState() (標準 SQLSTATE),區分死鎖 (-911)、鎖超時 (-913)、數據截斷 (+802) 等可重試/不可重試錯誤。掌握四類驅動的架構本質,即可在遷移、容器化、雲上部署、主機直連等場景中做出正確技術選擇,避免「ClassNotFoundException」「UnsatisfiedLinkError」「編碼亂碼」等經典坑點。