You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java应用连接Oracle8 Release 8.0.5.0.0遇ORA-02248报错求助

连接Oracle 8.0.5时的ORA-02248错误排查

问题场景

需要通过Java应用连接Oracle8 Release 8.0.5.0.0,编写的代码如下:

import java.sql.*;

class OracleConOldJava {
    public static void main(String args[]) {
        Connection con = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            // Load the Oracle JDBC driver
            Class.forName("oracle.jdbc.driver.OracleDriver");

            // Establish the database connection
            con = DriverManager.getConnection(
                "jdbc:oracle:thin:@192.168.1.3:1521/DBNAME", "USERNAME", "PASSWORD");

            // Create a statement
            stmt = con.createStatement();

            // Execute the SQL query with FETCH FIRST to limit the number of rows
            rs = stmt.executeQuery(
                "SELECT COL1, COL2, COL3 FROM TABLE_A FETCH FIRST 5 ROWS ONLY");

            // Iterate through the result set and print the data
            while (rs.next()) {
                System.out.println(
                    rs.getInt("COL") + "  " +
                    rs.getString("COL2") + "  " +
                    rs.getString("COL3"));
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                // Close the resources in the reverse order of acquisition
                if (rs != null) rs.close();
                if (stmt != null) stmt.close();
                if (con != null) con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

使用Java 1.4搭配ojdbc14.jar,或Java 1.8搭配ojdbc8.jar运行时,均出现以下错误:

C:\j2sdk1.4.2_18\bin\java.exe -cp .;ojdbc14.jar OracleConOldJava
java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-02248: invalid option for ALTER SESSION

        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:283)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:278)
        at oracle.jdbc.driver.T4CTTIoauthenticate.receiveOauth(T4CTTIoauthenticate.java:785)
        at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:362)
        at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:414)
        at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
        at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
        at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
        at java.sql.DriverManager.getConnection(DriverManager.java:512)
        at java.sql.DriverManager.getConnection(DriverManager.java:171)
        at OracleConOldJava.main(OracleConOldJava.java:14)

错误原因及解决方案

1. 核心原因:驱动版本不兼容

你使用的ojdbc14.jar、ojdbc8.jar都是为Oracle 10g及以后版本开发的高版本驱动,这些驱动在建立连接时会自动执行一些Oracle 8.0.5不支持的ALTER SESSION语句(比如设置时区、字符集参数等),而Oracle 8.0.5无法识别这些参数,直接抛出ORA-02248错误。

2. 正确的驱动版本选择

必须使用适配Oracle 8i(8.0.x)的JDBC驱动:

  • 若使用Java 1.2/1.3:选择classes12.jar
  • 若使用Java 1.4:选择Oracle 8i官方发布的ojdbc14.jar(注意是对应Oracle 8i版本的驱动,不是后续Oracle版本的同名jar包)
  • 通用兼容选项:选择ojdbc1.jar(适配Java 1.1及以上,完全兼容Oracle 8.0.5)

3. 其他需要修正的问题

除了驱动,代码里还有两处Oracle 8.0.5不支持的内容:

  • 连接URL格式错误:Oracle 8.0.5的thin驱动仅支持SID格式,需将URL中的斜杠改为冒号:
    con = DriverManager.getConnection(
        "jdbc:oracle:thin:@192.168.1.3:1521:DBNAME", "USERNAME", "PASSWORD");
    
  • SQL语法错误:FETCH FIRST 5 ROWS ONLY是Oracle 12c引入的语法,Oracle 8.0.5不支持,需改用ROWNUM过滤:
    rs = stmt.executeQuery(
        "SELECT COL1, COL2, COL3 FROM (SELECT COL1, COL2, COL3 FROM TABLE_A) WHERE ROWNUM <=5");
    

内容的提问来源于stack exchange,提问作者Nuwan Madushanka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 23:05:21