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

标签 java jdbc apache-commons-dbcp

我已经实现了 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/

相关文章:

java - DBCP(Apache Commons 数据库连接池)是否仍然相关?

java - JTable刷新问题

java - WICKET:如何获取客户端的 ip/地址

hibernate 异常 : Connection Pool exhausted error after Spring upgrade

创建 jar 后出现 java.lang.ClassNotFoundException : com. microsoft.sqlserver.jdbc.SQLServerDriver

java - rs.getString() 仅为动态选择语句选择列

postgresql - 方法 org.postgresql.jdbc4.Jdbc4Connection.isValid(int) 尚未实现

java - 替换 JSONObject 中的 JSONObject

java - 在支架开口上展示功能原型(prototype)

java - JDBC模板: how to properly handle insert if not exists