PoolingDataSource - Как использовать реализацию PreparedStatement для конкретного драйвера - PullRequest
0 голосов
/ 07 октября 2011

Я реализовал 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 Ответ

2 голосов
/ 07 октября 2011

Имя DelegatingPreparedStatement подразумевает, что оно просто делегирует исходное утверждение.Поэтому вы звоните delecatingPrepartedStatement.getDelegate(), который вернет OraclePreparedStatement.

Но на самом деле, постарайтесь не делать этого.

...