public class OracleConn {
// 單例模式獲取連接(生產環境建議替換為 HikariCP/Druid 連接池)
public static Connection getConn() {
Connection conn = null;
try {
// 1. 加載驅動(JDBC 4.0+ 可省略,但保留兼容舊版本)
Class.forName("oracle.jdbc.driver.OracleDriver"); // 注意:修正了原文冒號錯誤
// 2. 構建連接 URL:thin 驅動、主機、端口、SID
String url = "jdbc:oracle:thin:@localhost:1521:ORCL"; // SID 需替換為實際值
String user = "scott"; // 替換為實際用戶名
String password = "tiger"; // 替換為實際密碼
// 3. 建立連接
conn = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
throw new RuntimeException("Oracle 驅動未找到,請檢查 ojdbc*.jar", e);
} catch (SQLException e) {
throw new RuntimeException("數據庫連接失敗: " + e.getMessage(), e);
}
return conn;
}
// 優雅關閉資源(遵循:後創建先關閉)
public static void tryClose(ResultSet rs, Statement stmt, Connection conn) {
closeQuietly(rs);
closeQuietly(stmt);
closeQuietly(conn);
}
private static void closeQuietly(AutoCloseable closeable) {
if (closeable != null) {
try { closeable.close(); }
catch (Exception e) { /* 忽略關閉異常,記錄日誌即可 */ }
}
}
// 連接測試(健康檢查)
public static boolean testConn() {
Connection conn = null;
try {
// 實際項目中應從配置中心/屬性文件讀取
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:ORCL", "scott", "tiger");
return conn.isValid(2); // 2 秒超時驗證
} catch (Exception e) {
return false;
} finally {
closeQuietly(conn);
}
}
}
| 原文問題 | 修正方案 | 說明 |
|---|---|---|
驅動類名 oracle:jdbc.driver.OracleDriver | oracle.jdbc.driver.OracleDriver | 冒號為錯誤,應為點號 |
| 硬編碼 URL/用戶/密碼 | 外部化配置(properties/yaml/配置中心) | 安全、多環境部署 |
| 每次請求創建連接 | 生產必須使用連接池 | 性能、資源控制、防洩漏 |
| 異常僅 printStackTrace | 拋出 RuntimeException 或自定義異常 | 調用方可感知、統一處理 |
<!-- pom.xml -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>5.0.1</version>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc11</artifactId>
<version>23.4.0.0</version>
</dependency>
// Spring Boot application.yml
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: oracle.jdbc.OracleDriver
url: jdbc:oracle:thin:@//${DB_HOST}:${DB_PORT}/${DB_SERVICE}
username: ${DB_USER}
password: ${DB_PASSWORD}
hikari:
minimum-idle: 5
maximum-pool-size: 20
idle-timeout: 300000
connection-timeout: 20000
max-lifetime: 1200000
connection-test-query: SELECT 1 FROM DUAL
| JDK 版本 | 推薦驅動 | Maven 坐標 |
|---|---|---|
| JDK 8 | ojdbc8 | com.oracle.database.jdbc:ojdbc8:21.7.0.0 |
| JDK 11/17/21 | ojdbc11 | com.oracle.database.jdbc:ojdbc11:23.4.0.0 |
Oracle 21c+ 驅動已上傳 Maven Central,無需手動安裝到本地倉庫。
原文提供了基礎的 JDBC 連接 Oracle 代碼模板,但存在驅動類名錯誤、硬編碼配置、無連接池、異常處理不當等生產環境阻礙。現代 Java 開發應: