【问题标题】:NoSuchTableException in DbUnit OracleDbUnit Oracle 中的 NoSuchTableException
【发布时间】:2014-04-30 19:04:31
【问题描述】:

我正在尝试将 dbunit 与 oracle 一起使用,并有一个如下测试用例。当我尝试运行下面的代码时,它给了我。我不确定我在哪里错了。有人可以帮忙吗

org.dbunit.dataset.NoSuchTableException: INVOICE_STATUS_TYPE 在 org.dbunit.database.DatabaseDataSet.getTableMetaData(DatabaseDataSet.java:278) 在 org.dbunit.operation.DeleteAllOperation.execute(DeleteAllOperation.java:109) 在 org.dbunit.operation.CompositeOperation.execute(CompositeOperation.java:79)

import junit.framework.Assert;
import org.dbunit.DBTestCase;
import org.dbunit.PropertiesBasedJdbcDatabaseTester;
import org.dbunit.database.DatabaseConfig;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import org.junit.Test;


public class MyTest extends DBTestCase{

private FlatXmlDataSet loadedDataSet;
public MyTest() {

    super();
    System.out.println("TEST TEST");
    System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, "oracle.jdbc.OracleDriver" );
    System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=vp1.qa.nsc.com)(PORT=2186))(CONNECT_DATA=(SERVICE_NAME=FADBBD1E)))" );
    System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, "nscdba" );
    System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, "dscdbapwd" );
    System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_SCHEMA, "INVOICE" );
}


@Override
protected IDataSet getDataSet() throws Exception {

    //return new FlatXmlDataSetBuilder().build(new FileInputStream("dataset.xml"));

    loadedDataSet = new FlatXmlDataSet(this.getClass().getClassLoader().getResourceAsStream("dataset.xml"));
    System.out.println(loadedDataSet.getTableNames().length);
    return loadedDataSet;
}

@Test
public void testStatus() {
    System.out.println("Hey...");
    Assert.assertTrue( true );
}

protected void setUpDatabaseConfig(DatabaseConfig config) {
    config.setProperty( DatabaseConfig.FEATURE_QUALIFIED_TABLE_NAMES, true );
}
}

【问题讨论】:

  • 那么,数据库FADBBD1E中是否存在表INVOICE_STATUS_TYPE?

标签: java junit dbunit


【解决方案1】:

使用 Oracle,确保数据库凭据全部大写,即:

System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, "MYUSERNAME" );
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, "MYPASSWORD" );
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_SCHEMA, "INVOICE" );

【讨论】:

    【解决方案2】:

    您在哪里调用“org.dbunit.operation.DeleteAllOperation.execute()”?

    如果表确实存在,请查看如何获得 dbunit 连接。

    private IDatabaseConnection getConnectionUsing(Connection con,
            String username) throws SQLException, DatabaseUnitException {
        // oracle schema name is the user name
        IDatabaseConnection connection = new DatabaseConnection(con,
                username.toUpperCase());
        DatabaseConfig config = connection.getConfig();
        // oracle 10g
        config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY,
                new Oracle10DataTypeFactory());
        // receycle bin
        config.setProperty(
                DatabaseConfig.FEATURE_SKIP_ORACLE_RECYCLEBIN_TABLES,
                Boolean.TRUE);
        return connection;
    }
    
    private IDatabaseConnection getConnectionUsing(Connection con)
            throws DatabaseUnitException {
        return new DatabaseConnection(con);
    }
    

    如果您针对 oracle 运行测试,则需要提供 db 用户名作为模式名称。如果您针对 hsqldb 运行测试,请不要提供用户名。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 1970-01-01
      • 2023-03-15
      • 2012-04-23
      • 2011-06-15
      相关资源
      最近更新 更多