PoolingDataSource - 如何使用特定于驱动程序的PreparedStatement实现

时间:2011-10-06 20:46:57

标签: 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 个答案:

答案 0 :(得分:2)

DelegatingPreparedStatement的名称暗示它只是委托给原始语句。因此,请致电delecatingPrepartedStatement.getDelegate(),这将返回OraclePreparedStatement

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