#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 в
Если соединение отсутствует, вы можете получить эту ошибку.