2016-10-02 9 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は

+0

私は同様の問題を抱えている:あなたはまた、ラップ接続はOracle接続型の場合は例外:)例えば

キャストを避けるために、チェックするために、前BasicDataSource.isWrapperFor(Class<?> iface)使用することができます.con classとjndiデータソースの定義方法(java:comp/env)? – elcadro

答えて

0

私はを推測するのoracle.jdbc.OracleConnectionにキャストすることはできませんは、あなたのコードがthis.conの種類を示していないが、それはOracleConnectionにする必要があり、このラインで

this.con = ds.getConnection(); 

がスローされます。接続はラップされたdbcp接続なので、これを行うことはできません。

あなたはOracle接続をしたい場合は、BasicDataSource.unwrap(Class<T> iface)で前にそれをアンラップする必要があります。あなたはこれを置くことができ、

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

this.conタイプは、Oracle接続ではなく、私はあなたのソリューションを試みたが、それはexception..javax.naming.NoInitialContextExceptionを与える接続である:環境やシステムのプロパティでクラス名を指定する必要があり、またはアプレットのパラメータとして、またはアプリケーションリソースファイル:java.naming.factory.initialでは、元のコードでは例外が発生しません – ParthKansara

関連する問題