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

时间:2016-10-02 08:53:24

标签: 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无法强制转换为oracle.jdbc.OracleConnection

2 个答案:

答案 0 :(得分:0)

我猜ClassCastException被抛到这一行

this.con = ds.getConnection();

您的代码未显示this.con的类型,但必须是OracleConnection。你不能这样做,因为connection是一个包装的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);
}

答案 1 :(得分:0)

如果出现以下错误,请确保您已与数据库建立连接

java.lang.ClassCastException:org.apache.tomcat.dbcp.dbcp.PoolingDataSource $ PoolGuardConnectionWrapper无法在以下位置强制转换为oracle.jdbc.OracleConnection

如果没有连接,则可能会出现此错误。