2011-10-06 81 views
0

我已經實現了commons dbcpPoolingDataSource及其完美的工作 - 直到我遇到了使用java.sql.PreparedStatement接口的特定實現的問題。PoolingDataSource - 如何使用特定於驅動程序的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這使我相信,它在某種程度上可以做到這一點...

回答

2

DelegatingPreparedStatement顧名思義,它只是委託給原來的聲明。所以你打電話delecatingPrepartedStatement.getDelegate()這將返回OraclePreparedStatement

但確實,儘量不要這樣做。

+0

感謝和抱歉打破這一個規則:/ –

相關問題