org.apache.tomcat.dbcp.dbcp2.PoolingDataSource $PoolGuardConnectionWrapper не может быть приведен к oracle.jdbc.OracleConnection

#java #oracle #classcastexception

#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.язык программирования.ClassCastException: org.apache.tomcat.dbcp.dbcp2.PoolingDataSource $PoolGuardConnectionWrapper не может быть приведен к oracle.jdbc.OracleConnection

Комментарии:

1. У меня похожие проблемы, не могли бы вы указать свой класс this.con и как определяется ваш источник данных jndi (java: comp / env)?

Ответ №1:

Я думаю ClassCastException , это брошено в эту строку

 this.con = ds.getConnection();
  

В вашем коде не отображается тип this.con , но он должен быть an OracleConnection . Вы не можете этого сделать, потому что соединение представляет собой обернутое соединение dbcp.

Если вы хотите использовать соединение с Oracle, вы должны развернуть его перед BasicDataSource.unwrap(Class<T> iface) использованием . Вы также можете использовать BasicDataSource.isWrapperFor(Class<?> iface) before, чтобы проверить, имеет ли обернутое соединение тип соединения Oracle, чтобы избежать исключения исключения 🙂

Например:

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

Комментарии:

1. этот тип .con является соединением, это не соединение с Oracle, и я попробовал ваше решение, но оно выдает исключение ..javax.naming. Исключение NoInitialContextException: необходимо указать имя класса в свойстве среды или системы, или в качестве параметра апплета, или в файле ресурсов приложения: java.naming.factory.initial но это не дает исключения с моим исходным кодом

Ответ №2:

Если вы получаете сообщение об ошибке ниже, убедитесь, что у вас есть соединение с базой данных

java.язык программирования.Исключение ClassCastException: org.apache.tomcat.dbcp.dbcp.PoolingDataSource $PoolGuardConnectionWrapper не может быть приведен к oracle.jdbc.OracleConnection в

Если соединение отсутствует, вы можете получить эту ошибку.