Java DBUnit和Oracle JDBC(ClassCastException)
我想使用dbunit将我的测试数据库转储到原始xml文件中,得到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
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>