| 驅動類型 | 全稱 | 通訊機制 | 部署需求 | 適用場景 | 效能特徵 |
|---|---|---|---|---|---|
| JDBC OCI | Oracle Call Interface | JNI 呼叫 Client 端 C Library (OCI.dll/so) → Net8/Net Services → Server | Client 端需安裝 Oracle Client (Instant Client 或 Full Client)、配置 tnsnames.ora | 傳統 C/S、需高效能 Blob/Clob 處理、已有 Client 環境 | 理論較 Thin 高,特別在大物件存取 |
| JDBC Thin | Thin Client | 純 Java Socket 直連 Listener (Port 1521),實現 Oracle Net 協議 | 零部署,單一 JAR (ojdbc8/11.jar),跨平台 | **Web/中間層/雲原生首選**、容器化部署、無 Client 環境 | 略低於 OCI,但現代 JVM 優化後差距極小 |
| JDBC KPRB | Internal / Server-side | JVM 內部直接存取 SGA,走預設/當前 Session | 僅限資料庫內部 Java (Stored Procedure/Trigger/Java Stored Procedure) | 資料庫內部邏輯、高效能批次處理、無需帳密/URL | 最高 (零網路開銷) |
-- Thin (最常用)
jdbc:oracle:thin:@//host:port/service_name
jdbc:oracle:thin:@host:port:sid -- 舊式 SID 寫法
-- OCI (需 tnsnames.ora 別名)
jdbc:oracle:oci:@tns_alias
jdbc:oracle:oci8:@tns_alias -- 9i/10g 寫法
-- KPRB (內部)
jdbc:oracle:kprb:@ -- 或直接用 defaultConnection()
import java.sql.*;
public class ThinDemo {
public static void main(String[] args) throws Exception {
Class.forName("oracle.jdbc.OracleDriver"); // 11g+ 可省略 (SPI 自動載入)
String url = "jdbc:oracle:thin:@//dbhost:1521/ORCLPDB1";
try (Connection conn = DriverManager.getConnection(url, "scott", "tiger");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT banner FROM v$version")) {
while (rs.next()) System.out.println(rs.getString(1));
}
}
}
// URL 使用 tnsnames.ora 別名
String url = "jdbc:oracle:oci:@MY_TNS_ALIAS";
Connection conn = DriverManager.getConnection(url, "scott", "tiger");
// 其餘相同
**部署關鍵**:`LD_LIBRARY_PATH` (Linux) / `PATH` (Windows) 包含 `oci.dll` 所在目錄;`TNS_ADMIN` 指向 `tnsnames.ora` 目錄。
import java.sql.*;
import oracle.jdbc.*;
public class KprbDemo {
public static void main(String[] args) throws SQLException {
// 無需 URL/帳密/驅動註冊
Connection conn = new OracleDriver().defaultConnection();
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT banner FROM v$version")) {
while (rs.next()) System.out.println(rs.getString(1));
}
// **嚴禁關閉 defaultConnection**,否則後續呼叫拋異常
}
}
Thin 驅動以「純 Java、零部署、雲就緒」成為事實標準;OCI 保留於舊系統與特定高效能場景;KPRB 服務於資料庫內部擴展。理解三者通訊路徑與部署邊界,是 Java 應用架構師的必修功課。