| 驅動類型 | 全名 | 特點 | 適用場景 |
|---|---|---|---|
| JDBC OCI | Oracle Call Interface | 需安裝 Oracle Client,依賴 Native Library (DLL/so) | 傳統桌面應用、需高效能的本地連線 |
| JDBC Thin | Pure Java Driver | 純 Java 實作,透過 Socket 通訊,無需 Client 安裝 | Web 應用、跨平台部署、容器化環境 |
| JDBC KPRB | Server-side Internal Driver | 運行於資料庫內部 (Stored Procedure/Trigger),使用預設 Session | 資料庫內部 Java 程式 |
jdbc:oracle:thin:@//<host>:<port>/<service_name>
範例:jdbc:oracle:thin:@//192.168.2.1:1521/XE
關鍵特徵:@ 後有雙斜線 //。Service Name 可涵蓋叢集所有節點,是 Oracle 官方推薦格式。
jdbc:oracle:thin:@<host>:<port>:<SID>
範例:jdbc:oracle:thin:@192.168.2.1:1521:X01A
注意:Oracle 建議遷移至 Service Name。每個節點 SID 不同,不利叢集環境。
jdbc:oracle:thin:@<TNSName>
範例:jdbc:oracle:thin:@GL
前提:JVM 需設定 oracle.net.tns_admin 系統屬性指向 tnsnames.ora 所在目錄。
listener.ora 靜態註冊:GLOBAL_DBNAME=dave、SID_NAME=NEWCCStnsnames.ora:SERVICE_NAME=daveString dbUrl = "jdbc:oracle:thin:@127.0.0.1:1521:NEWCCS";
// 成功連線,可查詢資料
String dbUrl = "jdbc:oracle:thin:@//127.0.0.1:1521/dave";
// 成功連線,推薦用法
原因:Oracle 11g JDBC Thin Driver 版本相容性問題。
解決:將驅動類別從 oracle.jdbc.driver.OracleDriver 改為 oracle.jdbc.OracleDriver。
String dbUrl = "jdbc:oracle:thin:@DVD";
// 錯誤:java.sql.SQLException: Unknown host specified
解決方案一:啟動 JVM 時添加參數
-Doracle.net.tns_admin=D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN
解決方案二:程式碼中設定
System.setProperty("oracle.net.tns_admin",
"D:\\app\\Administrator\\product\\11.2.0\\dbhome_1\\NETWORK\\ADMIN");
package com.example.jdbc;
import java.sql.*;
public class OracleJdbcConnectionTest {
public static void main(String[] args) {
try {
// 1. 載入驅動 (建議使用新版類別名)
Class.forName("oracle.jdbc.OracleDriver");
// 2. 連線字串 (Service Name 格式)
String url = "jdbc:oracle:thin:@//localhost:1521/XE";
String user = "scott";
String password = "tiger";
// 3. 建立連線
try (Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT ename FROM emp")) {
// 4. 處理結果
while (rs.next()) {
System.out.println(rs.getString("ename"));
}
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
}
oracle.jdbc.OracleDriver 避免 11g 連線問題try-with-resources 自動關閉資源tns_admin,適合已有完整 Oracle Client 環境