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

Java 連接 Oracle 數據庫工具類:OracleDbManager 完整實現

     編輯:Java 相關知識

Oracle JDBC 連接要點

  • 驅動類:oracle.jdbc.OracleDriver (ojdbc8.jar/ojdbc11.jar)。
  • URL 格式:jdbc:oracle:thin:@//host:port/service_name (推薦) 或 jdbc:oracle:thin:@host:port:sid。
  • 常見問題:時區設置 (-Duser.timezone=GMT+8)、字符集 (NLS_LANG)、連接屬性 (oracle.net.CONNECT_TIMEOUT)。

工具類完整代碼

package com.util.db;

import java.sql.*;

public class OracleDbManager {
    private static final String URL = "jdbc:oracle:thin:@//localhost:1521/ORCLCDB"; // 服務名模式
    private static final String USER = "username";
    private static final String PASSWORD = "password";

    static {
        try {
            Class.forName("oracle.jdbc.OracleDriver");
        } catch (ClassNotFoundException e) {
            throw new ExceptionInInitializerError("Oracle 驅動加載失敗: " + e.getMessage());
        }
    }

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL, USER, PASSWORD);
    }

    // === 統一關閉方法(與 MySQL 版完全一致) ===
    public static void close(ResultSet rs) { /* 同前 */ }
    public static void close(Statement stmt) { /* 同前 */ }
    public static void close(PreparedStatement pstmt) { /* 同前 */ }
    public static void close(ResultSet rs, Statement stmt, Connection conn) { /* 同前 */ }
    public static void close(Statement stmt, Connection conn) { /* 同前 */ }
    public static void close(Connection conn) { /* 同前 */ }
}

Oracle 特有優化配置

Properties props = new Properties();
props.setProperty("user", USER);
props.setProperty("password", PASSWORD);
props.setProperty("oracle.net.CONNECT_TIMEOUT", "5000"); // 連接超時 5s
props.setProperty("defaultRowPrefetch", "100"); // 預取行數減少網絡交互
props.setProperty("useFetchSizeWithLongColumn", "true"); // 優化大字段讀取
Connection conn = DriverManager.getConnection(URL, props);

使用示例:調用存儲過程

CallableStatement cs = null;
try {
    cs = conn.prepareCall("{call PKG_USER.GET_USER_INFO(?, ?, ?)}");
    cs.setInt(1, userId); // IN 參數
    cs.registerOutParameter(2, Types.VARCHAR); // OUT 參數
    cs.registerOutParameter(3, Types.INTEGER);
    cs.execute();
    String name = cs.getString(2);
    int level = cs.getInt(3);
} finally {
    OracleDbManager.close(cs, conn);
}

避坑指南

問題解決方案
ORA-01805: 日期格式錯誤設置會話時區 ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD' 或使用 PreparedStatement.setTimestamp
中文亂碼確保數據庫字符集為 AL32UTF8,JDBC URL 添加 ?characterEncoding=UTF-8 (thin 驅動通常自動處理)
連接洩漏導致 ORA-00020嚴格使用 try-with-resources 或 finally 關閉,生產環境強制連接池
大字段 (CLOB/BLOB) 讀寫使用 clob.getCharacterStream() / blob.getBinaryStream() 流式處理

總結

OracleDbManager 與 MySQL 版結構一致,核心差異在驅動、URL、特有優化屬性。建議項目中抽象出通用 DbManager 介面,屏蔽數據庫差異,便於多數據源切換。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved