DB2 安裝目錄自帶 JDBC Type 4 驅動(純 Java,無需 Client),預設路徑:
C:\Program Files\IBM\SQLLIB\java\db2jcc.jar — 核心驅動C:\Program Files\IBM\SQLLIB\java\db2jcc_license_cu.jar — 授權檔(連線必備)db2jcc_license_cisuz.jar — z/OS、iSeries 等平台授權SET CLASSPATH=.;C:\Program Files\IBM\SQLLIB\java\db2jcc.jar;C:\Program Files\IBM\SQLLIB\java\db2jcc_license_cu.jar;C:\Program Files\IBM\SQLLIB\java\db2jcc_license_cisuz.jar
或在 IDE(Eclipse/IntelliJ)專案建置路徑中加入上述 JAR。
實測發現:搭配 Oracle/OpenJDK 執行會擲出 ClassNotFound 或驅動初始化異常。 原因在於 IBM JDBC 驅動(db2jcc)對 IBM JCE/JCE 提供者有依賴。請使用 DB2 安裝目錄自帶的 JDK:
C:\Program Files\IBM\SQLLIB\java\jdk
在 IDE 中設定 Project SDK 指向此路徑,或在啟動參數指定 -Djava.home=...。
package db2;
import java.sql.*;
public class BaseConnection {
private final String driver = "com.ibm.db2.jcc.DB2Driver";
// 遠端連線格式:jdbc:db2://host:port/dbName
private final String url = "jdbc:db2://localhost:50000/SAMPLE";
private final String user = "db2admin";
private final String password = "admin";
private Connection conn = null;
public BaseConnection() {
try {
Class.forName(driver);
this.conn = DriverManager.getConnection(url, user, password);
System.out.println("連線成功");
} catch (Exception e) {
System.err.println("驅動載入或連線失敗: " + e.getMessage());
e.printStackTrace();
}
}
public Connection getConnection() { return conn; }
public void close() {
try { if (conn != null) conn.close(); }
catch (Exception e) { System.err.println("關閉連線失敗: " + e.getMessage()); }
}
public static void main(String[] args) {
BaseConnection bc = new BaseConnection();
// 測試查詢
try (Statement st = bc.getConnection().createStatement();
ResultSet rs = st.executeQuery("SELECT CURRENT DATE FROM SYSIBM.SYSDUMMY1")) {
if (rs.next()) System.out.println("Server Date: " + rs.getDate(1));
} catch (Exception e) { e.printStackTrace(); }
finally { bc.close(); }
}
}
| 連線類型 | URL 格式 | 範例 |
|---|---|---|
| 本地 (Type 2) | jdbc:db2:dbName | jdbc:db2:SAMPLE |
| 遠端 (Type 4) | jdbc:db2://host:port/dbName | jdbc:db2://192.168.1.10:50000/SAMPLE |
| 附加參數 | jdbc:db2://host:port/dbName:key=value;... | jdbc:db2://localhost:50000/SAMPLE:retrieveMessagesFromServerOnGetMessage=true; |
ClassNotFoundException: com.ibm.db2.jcc.DB2Driver → CLASSPATH 遺漏 db2jcc.jar 或 JDK 非 IBM 版。SQLState 42968: License file not found → 缺少 db2jcc_license_cu.jar。生產環境建議使用 javax.sql.DataSource 實作(如 com.ibm.db2.jcc.DB2SimpleDataSource、HikariCP、DBCP2)管理連線池,避免頻繁建立/關閉連線的效能損耗。