2016-10-02 46 views
0

连接文件

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

+0

我遇到类似的问题,你可以把你的这.con类以及如何定义您的jndi数据源(java:comp/env)? – elcadro

回答

0

我猜ClassCastException在这条线

this.con = ds.getConnection(); 

您的代码不显示的this.con类型抛出,但它必须是一个OracleConnection。你不能那样做,因为连接是一个包装的dbcp连接。

如果您想使用Oracle Connection,则必须先使用BasicDataSource.unwrap(Class<T> iface)解包。您也可以在使用前BasicDataSource.isWrapperFor(Class<?> iface),要检查包装的连接是Oracle连接类型,以避免铸造例外:)

例如:

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

this.con类型是一个连接,它不是一个Oracle连接,我试过你的解决方案,但它提供了异常..javax.naming.NoInitialContextException:需要在环境或系统属性中指定类名称,或者作为小程序参数,或者在应用程序资源文件中:java.naming.factory.initial,但它不会给我的原始代码异常 – ParthKansara

相关问题