尝试在Oracle 11.2.0.2.0(64位)中获取连接时出现java.lang.ArithmeticException

jab*_*lab 7 java oracle oracle11g java-stored-procedures

我目前正在使用Oracle中的Java存储过程,并且在尝试在Java代码中获取连接时会看到一些奇怪的行为.

我的Java被打包成一个jar文件,然后使用loadjava命令行实用程序部署到Oracle中.package然后在数据库中创建A ,该数据库通过调用规范将指定Java类中的每个方法映射到PL/SQL函数.

我正在使用的一些专栏是CLOBs.在Java中,我尝试将其值CLOB(在调用规范中映射为oracle.sql.CLOB)提取到String:

private static String getStringFromCLOB(CLOB clob) throws SQLException {
    long length = clob.length();
    return clob.getSubString(1, (int) length);
}
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我在SQL*Plus中显示以下堆栈跟踪:

java.lang.ArithmeticException: / by zero
    at oracle.jdbc.driver.T2SConnection.<init>(T2SConnection.java:107)
    at oracle.jdbc.driver.T2SDriverExtension.getConnection(T2SDriverExtension.java:31)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:481)
    at oracle.jdbc.driver.OracleDriver.defaultConnection(OracleDriver.java:505)
    at oracle.sql.DatumWithConnection.getPhysicalConnection(DatumWithConnection.java:53)
    at oracle.sql.DatumWithConnection.getInternalConnection(DatumWithConnection.java:177)
    at oracle.sql.CLOB.getDBAccess(CLOB.java:1383)
    at oracle.sql.CLOB.length(CLOB.java:197)
Run Code Online (Sandbox Code Playgroud)

在我刚刚看到这样的消息之前,我Exception用一个包装了违规方法的内容,try / catch所以我可以将完整的堆栈跟踪转储到System.out.

值得注意的是,我已经将其用于Oracle 11.2.0.1.0(32位),但它不适用于Oracle 11.2.0.2.0(64位).

我还有其他Java支持的PL/SQL function工作没有问题.只有尝试使连接失败的人才会这样做.

我已经看了一下<ORACLE_HOME>\jdbc\lib,虽然这两个发行版的名称相同,但这两个发行版似乎有所不同.目录中的jar(大小为11.2.0.1.0,显示大小为11.2.0.2.0):

  • ojdbc5.jar (1,950KB | 1,983KB)
  • ojdbc5_g.jar (3,010KB | 3,271KB)
  • ojdbc5dms.jar (2,374KB | 2,489KB)
  • ojdbc5dms_g.jar (3,030KB | 3,291KB)
  • ojdbc6.jar (2,062KB | 2,102KB)
  • ojdbc6_g.jar (3,323KB | 3,782KB)
  • ojdbc6dms.jar (2,594KB | 2,698KB)
  • ojdbc6dms_g.jar (3,344KB | 3,805KB)
  • simplefan.jar (20KB | 20KB)< - 可能相同

这些jar的清单文件确认它们是针对特定版本构建的,即11.2.0.1.0或11.2.0.2.0.是否有可能在11.2.0.2.0中引入了一个错误?或者它更可能是用户,即我的错误:-)

此外,oracle.jdbc.driver.T2SConnection班级住在哪里?

任何帮助/指导非常感谢.如果您需要更多信息,请与我们联系.

Fáb*_*ida 5

当我的密码到期时,我遇到了这个问题。我只是通过更改密码解决了这个问题。


jab*_*lab 0

对于那些可能遇到此问题的人,我们发现它是由 Oracle 中的 JVM 安装损坏引起的。这可能是由于安装不当造成的。

重新安装 Oracle 的 JVM 方面,oracle.jdbc.driver.OracleConnection.defaultConnection()无论是显式调用还是作为另一个调用(例如oracle.sql.CLOB.length().