0

我已经实现了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 提供的连接池? 我想使用特定于 Oracle 实现的 registerReturnParameter() 和 getReturnResultSet()。我知道我违反了基本规则#1 ...

此外, PoolingDataSource 包装了一个 OracleXADataSource 这让我相信它以某种方式可以做到这一点......

4

1 回答 1

2

的名称DelegatingPreparedStatement暗示它只是委托给原始语句。因此,您调用delecatingPrepartedStatement.getDelegate()which 将返回OraclePreparedStatement.

但实际上,尽量不要这样做。

于 2011-10-06T20:56:26.677 回答