【问题标题】:ClassCastException in oracle.sql.ArrayDescriptor.createDescriptororacle.sql.ArrayDescriptor.createDescriptor 中的 ClassCastException
【发布时间】:2017-12-05 11:50:33
【问题描述】:

我在 Web 应用程序中创建 ArrayDescriptor 时收到了 ClassCastException。 我正在使用 jndi 查找从 Tomcat DBCP 连接池获取连接。 我正在使用 ojdbc.jar 14 驱动程序 jar、Oracle 11g 服务器、Tomcat 7 服务器和 JDK 8。 我没有从池返回的连接中获取 oracle.jdbc.OracleConnection 对象。

以下是错误堆栈跟踪:

java.lang.ClassCastException: com.sun.proxy.$Proxy34 cannot be cast to oracle.jdbc.OracleConnection
        at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:149)
        at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:115)

连接sysout是:

ProxyConnection[PooledConnection[oracle.jdbc.driver.T4CConnection@770799c2]]

下面Tomcat中server.xml中的JNDI配置:-

 Resource
         name="jdbc/my_db"
         auth="Container"``
         type="javax.sql.DataSource"
         factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
         initialSize="5"
         maxActive="5"
         maxIdle="2"
         minIdle="1"
         maxTotal="10"
         maxWaitMillis="10000"
         timeBetweenEvictionRunsMillis="34000"
         minEvictableIdleTimeMillis="55000"
         validationQuery="SELECT 1 FROM DUAL"
         validationInterval="34000"
         testOnBorrow="true"
         removeAbandoned="true"
         removeAbandonedTimeout="55"
         driverClassName="oracle.jdbc.OracleDriver"
         url="jdbc:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
         username="aaaaaaa"
         password="bbbbbbbbbb"
         connectionProperties="SetBigStringTryClob=true"
         accessToUnderlyingConnectionAllowed="true"/>    

使用 Hibernate 获取连接:-

getSession().doWork(new Work() {
            @Override
            public void execute(Connection connection) throws SQLException {

                ArrayDescriptor descNum = 
     ArrayDescriptor.createDescriptor("ARRAY_NUMC", connection );
}

我也使用了连接解包方法,但不起作用。

【问题讨论】:

  • "我也使用了连接解包方法,但不起作用。"哪个结果和联系让你?
  • 在展开期间出错(OracleConnection.class):- 原因:java.sql.SQLException:不是 org.apache.tomcat.jdbc.pool 中 oracle.jdbc.driver.OracleConnection 的包装。 org.apache.tomcat.jdbc.pool.ProxyConnection.invoke(ProxyConnection.java:119) 处的 ProxyConnection.unwrap(ProxyConnection.java:87) org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java: 108) 在 org.apache.tomcat.jdbc.pool.DisposableConnectionFacade.invoke(DisposableConnectionFacade.java:81) 在 com.sun.proxy.$Proxy34.unwrap(Unknown Source)
  • 应该也适合你。检查这个答案 - stackoverflow.com/a/58233348/8413677

标签: java oracle hibernate tomcat jdbc


【解决方案1】:

始终尝试使用最新的 JDBC 驱动程序,即 12.2.0.1 JDBC driver 在 OTN 上可用。

【讨论】:

    猜你喜欢
    • 2011-08-09
    • 2012-06-25
    • 2019-05-12
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多