我已经实现了 commons dbcp PoolingDataSource
及其工作完美 - 直到我遇到使用 java.sql.PreparedStatement
接口(interface)的特定实现的问题。
((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 的实现的。我知道我违反了第一条基本规则...
此外,PoolingDataSource 正在包装 OracleXADataSource,这让我相信以某种方式可以做到这一点......
最佳答案
DelegatingPreparedStatement 的名称意味着它只是委托(delegate)给原始语句。因此,您调用 deecatingPrepartedStatement.getDelegate()
,它将返回 OraclePreparedStatement
。
但实际上,尽量不要这样做。
关于java - PoolingDataSource - 如何使用特定于驱动程序的PreparedStatement实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7680273/