#java #jdbc #apache-commons-dbcp
#java #jdbc #apache-commons-dbcp
Вопрос:
Я внедрил commons dbcp PoolingDataSource
, и он работает отлично — вплоть до тех пор, пока не столкнулся с проблемой использования конкретной реализации java.sql.PreparedStatement
интерфейса.
((OraclePreparedStatement) getStatement()).registerReturnParameter(index, sqlType);
java.lang.ClassCastException:
org.apache.commons.dbcp.DelegatingPreparedStatement
cannot be cast to oracle.jdbc.OraclePreparedStatemen
Я понимаю, почему это происходит. Есть ли какой-либо способ использовать реализацию PreparedStatement для конкретного поставщика, но при этом иметь возможность использовать пул соединений, предоставляемый Commons DBCP?Я хотел бы использовать registerReturnParameter() и getReturnResultSet(), которые специфичны для реализации Oracle. Я знаю, что нарушил кардинальное правило № 1 …
Кроме того, PoolingDataSource оборачивает OracleXADataSource, что заставляет меня поверить, что это как-то возможно сделать…
Ответ №1:
Название DelegatingPreparedStatement
подразумевает, что оно просто делегирует исходному оператору. Итак, вы вызываете delecatingPrepartedStatement.getDelegate()
, который вернет OraclePreparedStatement
.
Но на самом деле, старайтесь этого не делать.
Комментарии:
1. Спасибо и извините за нарушение правил в этом :/