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

JSP 連接 Oracle 數據庫實戰:驅動配置、常見錯誤排查與代碼範例

     編輯:關於JSP

前言

Oracle 是企業級 Java Web 開發最常用的數據庫之一。本文聚焦 JBuilder / Eclipse / IDEA 等 IDE 環境下配置 Oracle JDBC 驅動、連接 URL 構建、常見異常排查,並提供可直接運行的 JDBC 核心代碼。

一、驅動包選擇與類路徑配置

Oracle 版本推薦驅動 JAR備註
8i / 9i / 10g / 11gojdbc14.jar (JDK 1.4/5) / ojdbc5.jar (JDK 5/6) / ojdbc6.jar (JDK 6/7/8)舊版專用
12c / 18c / 19c / 21cojdbc8.jar (JDK 8/11) / ojdbc10.jar (JDK 10/11) / ojdbc11.jar (JDK 11+)現代首選

配置要點:

  1. 將 JAR 放入項目 WEB-INF/lib(Web 應用)或 IDE 全局庫。
  2. 系統環境變量 CLASSPATH 非必需,但建議加入以便命令行測試。
  3. JBuilder 具體:Enterprise Setup → Configure Libraries 添加 JAR 路徑;Database Pilot 中驅動圖標變黑表示加載成功。

二、連接 URL 模式

// Thin 模式(純 Java,無需客戶端,最常用)
jdbc:oracle:thin:@::
// 例子
jdbc:oracle:thin:@127.0.0.1:1521:ORCL

// Service Name 模式(支援 RAC/PDB)
jdbc:oracle:thin:@//:/
// 例子
jdbc:oracle:thin:@//192.168.1.100:1521/PDB1

// OCI 模式(需安裝 Oracle Client,性能略優但部署複雜)
jdbc:oracle:oci:@

三、核心 JDBC 代碼範例(標準模式)

import java.sql.*;

public class OracleJdbcDemo {
    public static void main(String[] args) {
        String url = "jdbc:oracle:thin:@127.0.0.1:1521:ORCL";
        String user = "scott";
        String pwd = "tiger";

        try (Connection conn = DriverManager.getConnection(url, user, pwd);
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT empno, ename, job, hiredate FROM emp")) {

            // 1. 註冊驅動 (JDBC 4.0+ 可省略 Class.forName)
            // Class.forName("oracle.jdbc.OracleDriver");

            System.out.println("工號\t姓名\t職位\t入職日期");
            while (rs.next()) {
                System.out.printf("%s\t%s\t%s\t%s%n",
                    rs.getString("empno"),
                    rs.getString("ename"),
                    rs.getString("job"),
                    rs.getDate("hiredate"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

四、高頻異常與解決方案

異常/現象原因解決
ClassNotFoundException: oracle.jdbc.OracleDriver驅動 JAR 未在類路徑檢查 WEB-INF/lib / IDE 庫 / CLASSPATH
IO異常: The Network Adapter could not establish the connectionIP/端口/SID 錯誤、防火牆、監聽未啟動sqlplus 測試連通性;檢查 listener.ora、tnsnames.ora
java.sql.SQLException: IO異常,不在流模式下操作 LOB (BLOB/CLOB) 時用了普通 Statement用 OracleStatement / oracle.sql.BLOB API;或升級驅動
setAutoCommit 失敗連接已關閉或池中連接失效關閉舊連接重新獲取;配置連接池驗證查詢 (SELECT 1 FROM DUAL)
WebLogic 連接池報「無可用連接」但 DB 空閒後台 exp 導出同義詞用戶導致進程僵死 (Oracle 9i/10g Bug)殺掉 exp 進程、重啟 DB、禁止導出同義詞用戶

五、WebLogic / Tomcat 連接池配置片段

Tomcat (context.xml / server.xml)

<Resource name="jdbc/OracleDS"
    auth="Container"
    type="javax.sql.DataSource"
    driverClassName="oracle.jdbc.OracleDriver"
    url="jdbc:oracle:thin:@127.0.0.1:1521:ORCL"
    username="scott"
    password="tiger"
    maxTotal="20"
    maxIdle="10"
    maxWaitMillis="-1"
    validationQuery="SELECT 1 FROM DUAL"
    testOnBorrow="true"/>

JSP 中使用 DataSource

<%
    Context ctx = new InitialContext();
    DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/OracleDS");
    try (Connection conn = ds.getConnection()) {
        // 業務邏輯
    }
%>

六、XA 分布式事務提示

  • Windows: ORACLE_XA;xaosw;%ORACLE_HOME%\bin\oraxa12.lib %ORACLE_HOME%\precomp\lib\orasql12.lib (分號分隔,同一行)
  • Unix/Linux: 冒號分隔路徑。
  • 若未設 ORACLE_HOME 環境變量,請寫絕對路徑。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved