【问题标题】:DBUnit and Oracle JDBC (ClassCastException)DBUnit 和 Oracle JDBC (ClassCastException)
【发布时间】:2011-06-15 01:12:39
【问题描述】:

我想使用 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 不能转换为 oracle.jdbc.OracleResultSet

我正在使用 ojdbc14-10.2.0.3.0.jar、commons-dbcp-1.2.2.jar 和 dbunit-2.4.7.jar。

这是 oracle jdbc 中的错误吗? 在 ojdbc 驱动程序中我发现了这样的东西:

/**
 * 
 * TODO UnitTests are completely missing
 * @author Phil Barr
 * @author Last changed by: $Author: jbhurst $
 * @version $Revision: 1072 $ $Date: 2009-10-12 19:46:45 +0200 (lun, 12 ott 2009) $
 * @since 2.4.0
 */
public class OracleXMLTypeDataType extends BlobDataType
{

    public Object getSqlValue(int column, ResultSet resultSet) throws SQLException,     TypeCastException
    {
        byte[] data = new byte[0];
        OracleResultSet oracleResultSet = (OracleResultSet) resultSet;
        ... some other stuf ...
    }
...
}

看起来像 oracle 问题,从 javadoc 看来,它似乎根本没有经过测试。 有没有人遇到过类似的问题?

【问题讨论】:

    标签: java oracle jdbc dbunit


    【解决方案1】:

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

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

    由于您使用的是连接池,因此 DbUnit 实际上并不能访问特定于 Oracle 的对象,而是访问池提供的包装器。

    要么停止使用池进行测试,要么从池连接中获取底层连接并将其传递给 DBUnit(这可能会导致 DBUnit 关闭物理连接,而池试图通过仅提供包装器来避免这种情况)。

    【讨论】:

      【解决方案2】:

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

      <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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-23
        • 2018-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多