首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JDBC 連接 Oracle 實例完整工具類:配置、連接池、優雅關閉

     編輯:Java 相關知識

核心工具類:OracleConn

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.OracleDriveroracle.jdbc.driver.OracleDriver冒號為錯誤,應為點號
硬編碼 URL/用戶/密碼外部化配置(properties/yaml/配置中心)安全、多環境部署
每次請求創建連接生產必須使用連接池性能、資源控制、防洩漏
異常僅 printStackTrace拋出 RuntimeException 或自定義異常調用方可感知、統一處理

生產級升級:HikariCP 連接池配置

<!-- 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

Oracle JDBC 版本選擇指南

JDK 版本推薦驅動Maven 坐標
JDK 8ojdbc8com.oracle.database.jdbc:ojdbc8:21.7.0.0
JDK 11/17/21ojdbc11com.oracle.database.jdbc:ojdbc11:23.4.0.0

Oracle 21c+ 驅動已上傳 Maven Central,無需手動安裝到本地倉庫。

總結

原文提供了基礎的 JDBC 連接 Oracle 代碼模板,但存在驅動類名錯誤、硬編碼配置、無連接池、異常處理不當等生產環境阻礙。現代 Java 開發應:

  1. 使用 HikariCP 等成熟連接池
  2. 配置外部化,環境變量注入敏感信息
  3. 異常轉換為運行時異常,配合全局異常處理器
  4. 選擇匹配 JDK 版本的官方驅動(Maven Central 直接獲取)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved