我已经实现了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,这让我相信它可以以某种方式实现这一点......
答案 0 :(得分:2)
DelegatingPreparedStatement
的名称暗示它只是委托给原始语句。因此,请致电delecatingPrepartedStatement.getDelegate()
,这将返回OraclePreparedStatement
。
但实际上,尽量不要这样做。