Java DBUnit和Oracle JDBC(ClassCastException)

Java DBUnit和Oracle JDBC(ClassCastException),java,oracle,jdbc,dbunit,Java,Oracle,Jdbc,Dbunit,我想使用dbunit将我的测试数据库转储到原始xml文件中,得到ClassCastException。代码如下: new FlatXmlWriter(new FileOutputStream("expected_ds.xml")). write(getDbunitConnection().createDataSet(new String[]{"TAB1","TAB2"})); 因此: java.lang.ClassCastException: org.apache.common

我想使用dbunit将我的测试数据库转储到原始xml文件中,得到ClassCastException。代码如下:

new FlatXmlWriter(new FileOutputStream("expected_ds.xml")).
        write(getDbunitConnection().createDataSet(new String[]{"TAB1","TAB2"}));
因此:

java.lang.ClassCastException: org.apache.commons.dbcp.DelegatingResultSet cannot be cast to oracle.jdbc.OracleResultSet 这看起来像是oracle的问题,从javadoc来看,它似乎根本没有经过测试。
有人遇到过类似的问题吗?

Oracle JDBC驱动程序在这里没有问题

看起来DBUnit假设它可以将
ResultSet
强制转换为Oracle特定的类型。首先,这是个坏主意(但在某些情况下无法避免)

由于您使用的是连接池,DbUnit实际上无法访问Oracle特定的对象,而是访问池提供的包装器

停止使用池进行测试,或者从池连接获取基础连接并将其传递给DBUnit(这有可能导致DBUnit关闭物理连接,而池仅通过提供包装器来避免物理连接)。

另一个选项是“不要使用Apache DBCP”。使用Oracle数据源代替Apache

<bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource" destroy-method="close">
        <property name="URL" value="${test.db.url}" />
        <property name="user" value="${test.db.username}"/>
        <property name="password" value="${test.db.password}"/>
        <property name="connectionCachingEnabled" value="true"/>
</bean>

<bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource" destroy-method="close">
        <property name="URL" value="${test.db.url}" />
        <property name="user" value="${test.db.username}"/>
        <property name="password" value="${test.db.password}"/>
        <property name="connectionCachingEnabled" value="true"/>
</bean>