gpt4 book ai didi

java - ClassCastException - oracle.jdbc.OraclePreparedStatement

转载 作者:搜寻专家 更新时间:2023-10-31 19:35:08 24 4
gpt4 key购买 nike

我遇到了一个严重的问题,这是事实 -

我正在注册一个特定的返回参数,为此我将 java.sql.PreparedStatement 转换为 oracle.jdbc.OraclePreparedStatement。

((OraclePreparedStatement) getStatement())
.registerReturnParameter(index, sqlType);

当我从 Eclipse 运行它时效果很好,它甚至可以在我们的开发服务器上按预期运行。然而,当我将它移动到我们的测试服务器时,我遇到了意外错误......

oracle.jdbc.driver.OraclePreparedStatementWrapper cannot be cast
to oracle.jdbc.OraclePreparedStatement

这对我来说是一个非常奇怪的错误,因为我确信 OraclePreparedStatement 可以从 getStatement() 分配。我已经调试并发现这对所有环境都是正确的:

//class oracle.jdbc.driver.OraclePreparedStatementWrapper
getStatement().getClass();

本地和开发环境都使用我在 META-INF/context.xml 中设置的数据源:

<Resource name="dataSource/dbsubm" auth="Container"
type="oracle.jdbc.xa.client.OracleXADataSource"
factory="org.apache.naming.factory.BeanFactory"
user="*****" password="******"
URL="jdbc:oracle:thin:@host:port:db" />

TEST 环境不同,因为它有一个来自 server.xml 的数据源,即使配置完全相同。对我来说,这是这些环境之间的唯一区别。

可能是什么问题?为什么使用相同的代码但不同的环境会得到 ClassCastException?使用 getClass() 我可以看出它们都是同一类型...请帮忙!

最佳答案

如果转换跨越类加载器边界,则可能会发生 ClassCastException。例如,如果返回的语句对象的类是由不同于在您的代码中加载 OraclePreparedStatemen 的类加载器加载的。这可能是由于在两个地方有两个独立的 JDBC jar 副本,一个由您的 Java EE 容器(Tomcat?WAS?)使用,另一个由您的代码使用。

关于java - ClassCastException - oracle.jdbc.OraclePreparedStatement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6942763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com