在Oracle Database JVM上运行时出现ClassCastException

时间:2013-05-16 13:18:12

标签: oracle jdbc jvm

我有以下代码:

OracleDataSource ods = new OracleDataSource();
ods.setURL(thinConnectionString);
OracleConnection conn = (OracleConnection) ods.getConnection();

ArrayDescriptor d = ArrayDescriptor.createDescriptor("MDSYS.RDF_MODELS", conn);

当我从Oracle的VM外部运行此代码时,它可以正常运行。但是,当我使用loadjava工具将其加载到Oracale Database JVM上然后在Oracle中运行时,我得到以下异常:

java.lang.ClassCastException
    at oracle.jdbc.driver.PhysicalConnection.putDescriptor(PhysicalConnection.java)
    at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:156)
    at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:123)
    at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:106)
    at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:73)
    at XercesTest.Test1(XercesTest.java:46)
    at XercesTest.Test(XercesTest.java:171)

导致此问题的原因以及如何解决此问题?

修改

当我检查连接对象的基础类型时,我在Oracle的VM外部运行时获得类型oracle.jdbc.driver.T4CConnection,在服务器上运行时获得oracle.jdbc.driver.T2SConnection

编辑2:[求助]

问题是由于jdbc驱动程序类中的冲突造成的; loadjava意外地将ojdbc5.jar中的依赖文件加载到数据库中,这些文件引起了Oracle的注意。一旦我删除了这些,一切都运行良好。

1 个答案:

答案 0 :(得分:1)

OracleDataSource和OracleConnection类来自哪里?您是否尝试使用“标准JDBC类”来获取连接?

Connection conn = DriverManager.getConnection("jdbc:default:connection")

您的数据源连接似乎不是Oracle驱动程序所期望的。

您是否相应地更改了JDBC URL?

其他操作是否也会失败,或者只是ArrayDescriptor?