java - org.apache.tomcat.dbcp.dbcp2.PoolingDataSource$PoolGuardConnectionWrapper 无法转换为 oracle.jdbc.OracleConnection

标签 java oracle classcastexception

连接文件

InitialContext initialContext = new InitialContext();
Context context = (Context) initialContext.lookup("java:comp/env");

//The JDBC Data source that we just created
DataSource ds = (DataSource) context.lookup("connpool");
this.con = ds.getConnection();
this.des=ArrayDescriptor.createDescriptor("ARRAY_INT",this.con);

System.out.println("in set array1");
this.arr_to_pass=new ARRAY(this.des,this.con,arr);
this.csmt.setArray(index, this.arr_to_pass);

但是我遇到了以下异常

java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp2.PoolingDataSource$PoolGuardConnectionWrapper cannot be cast to oracle.jdbc.OracleConnection

最佳答案

我猜ClassCastException被抛出到这一行

this.con = ds.getConnection();

您的代码未显示 this.con 的类型,但它必须是 OracleConnection 。您不能这样做,因为连接是包装的 dbcp 连接。

如果你想获取Oracle Connection,你必须先用BasicDataSource.unwrap(Class<T> iface)解开它。 。您还可以使用BasicDataSource.isWrapperFor(Class<?> iface)之前,检查包装的连接是否是 Oracle Connection 类型,以避免强制转换异常:)

例如:

if (ds.getConnection().isWrapperFor(OracleConnection.class)) {
    this.con = ds.getConnection().unwrap(OracleConnection.class);
}

关于java - org.apache.tomcat.dbcp.dbcp2.PoolingDataSource$PoolGuardConnectionWrapper 无法转换为 oracle.jdbc.OracleConnection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39815379/

相关文章:

database - 如何在没有事务的情况下使用 Oracle?

java - 将可变参数从 Java 代码传递到 SQL 或 PL/SQL

java - ClassCastException 将 Object[] 转换为 Trie.Node<V> 但不是 E[]

java - Spark udf - 带有 json 的 classcastException

java - 如何根据 Accepts header 以不同方式序列化 POJO 字段

java - 所有本地应用程序上的 VisualVM "not supported for this JVM"?

java - Spring Boot 2.1.9.RELEASE - 读取资源文件

java - ListView 加载速度更快

UNIX 上与 Oracle DB 的 Java getConnection 崩溃或花费的时间比 Windows 上长得多

java - 了解 java return 语句中的类转换异常