首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Java JDBC 連接 Oracle 完整示例代碼 (含 Thin/OCI 驅動、連接池)

     編輯:Oracle 資料庫相關知識

環境準備

  • JDK 1.8+
  • Oracle JDBC 驅動 ojdbc8.jar 放入 Classpath
  • Oracle 客戶端已安裝並配置 tnsnames.ora (OCI 模式需用)

基礎 Thin 驅動連接示例

import java.sql.*;

public class OracleJdbcDemo {
    public static void main(String[] args) throws SQLException {
        // 1. 註冊驅動 (JDBC 4.0+ SPI 自動發現,可省略)
        // DriverManager.registerDriver(new oracle.jdbc.OracleDriver());

        // 2. 連接 URL (Thin 模式)
        String url = "jdbc:oracle:thin:@172.28.31.85:1521:YIKATONG";
        String user = "scott";
        String pwd  = "tiger";

        // 3. 獲取連接
        try (Connection conn = DriverManager.getConnection(url, user, pwd)) {
            System.out.println("Connected: " + conn.getMetaData().getURL());

            // 4. 執行查詢
            try (Statement stmt = conn.createStatement();
                 ResultSet rs = stmt.executeQuery("SELECT * FROM test")) {
                while (rs.next()) {
                    System.out.println(rs.getString(1));
                }
            }
        }
    }
}

OCI (Thick) 驅動連接

String url = "jdbc:oracle:oci:@tns_alias";  // 需 tnsnames.ora 配置別名
// 或
String url = "jdbc:oracle:oci:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=...)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=...)))";

差異: OCI 需安裝 Oracle Instant Client/完整客戶端,性能略優、支持更多高級特性 (如透明應用故障轉移 TAF),但部署複雜。

生產級連接池配置 (HikariCP)

HikariConfig config = new HikariConfig();
config.setDriverClassName("oracle.jdbc.OracleDriver");
config.setJdbcUrl("jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)(FAILOVER=on)"
    + "(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.10)(PORT=1521))"
    + "(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.11)(PORT=1521)))"
    + "(CONNECT_DATA=(SERVICE_NAME=PROD_SVC)))");
config.setUsername("app_user");
config.setPassword("app_pwd");
config.setMaximumPoolSize(30);
config.setMinimumIdle(10);
config.setConnectionTimeout(5000);
config.setIdleTimeout(300000);
config.setMaxLifetime(1200000);
config.setLeakDetectionThreshold(60000);
config.setConnectionInitSql("ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS' "
    + "NLS_TIMESTAMP_FORMAT='YYYY-MM-DD HH24:MI:SS.FF' "
    + "NLS_TIMESTAMP_TZ_FORMAT='YYYY-MM-DD HH24:MI:SS.FF TZR'");

HikariDataSource ds = new HikariDataSource(config);
// 使用: try (Connection c = ds.getConnection()) { ... }

關鍵最佳實踐

  • 預編譯語句: 僅用 PreparedStatement,防注入、計劃復用。
  • Fetch Size: stmt.setFetchSize(500) 減少網絡往返。
  • 批量提交: pstmt.addBatch() + executeBatch() 大幅提升批量寫入吞吐。
  • 關閉資源: Try-with-resources 自動關閉 Connection/Statement/ResultSet。
  • 驅動版本匹配: JDK 8 → ojdbc8.jar,JDK 11/17 → ojdbc11.jar,JDK 21 → ojdbc11.jar (兼容)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved