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

发布于 2024-12-08 11:14:01 字数 685 浏览 1 评论 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提供的连接池?我想使用registerReturnParameter()和getReturnResultSet()这是特定于 Oracle 的实现的。我知道我违反了基本规则 #1 ...

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

I've implemented the commons dbcp PoolingDataSource and its working perfectly - right up until I ran into an issue of using a specific implementation of the java.sql.PreparedStatement interface.

((OraclePreparedStatement) getStatement()).registerReturnParameter(index, sqlType); 

java.lang.ClassCastException: 
org.apache.commons.dbcp.DelegatingPreparedStatement 
cannot be cast to oracle.jdbc.OraclePreparedStatemen

I understand why this is happening. Is there any way to use a vendor-specific implementation of PreparedStatement but still be able to use the connection pooling that is provided by Commons DBCP? I'd like to use the registerReturnParameter() and getReturnResultSet() which are specific to Oracle's implementation. I know I've violated cardinal rule #1 ...

Also, the PoolingDataSource is wrapping a OracleXADataSource which makes me believe that it's somehow possible to do this...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

暖心男生 2024-12-15 11:14:01

DelegatingPreparedStatement 的名称意味着它只是委托给原始语句。因此,您调用 deecatingPrepartedStatement.getDelegate() ,它将返回 OraclePreparedStatement

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

The name of DelegatingPreparedStatement implies that it simply delegates to the original statement. So you call delecatingPrepartedStatement.getDelegate() which will return the OraclePreparedStatement.

But really, try not to do this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文