Java DBUnit AmbiguousTableNameException错误引发

时间:2019-05-17 15:21:31

标签: java sql postgresql dbunit spring-test-dbunit

我正在尝试使用DBUnit(2.6.0),并且正在尝试导出完整的数据库(PostgreSQL)。但是会引发以下异常:

  

线程“ main” org.dbunit.database.AmbiguousTableNameException中的异常:FLYWAY_SCHEMA_HISTORY

这是正确的行为,因为我有两个具有相同名称的不同表的表:

enter image description here

然后我读到您可以设置一个属性合格表名http://dbunit.sourceforge.net/properties.html#qualifiedtablenames),该属性将考虑架构名称。所以我的代码如下:

public class DbUnitExportTool {

public static void main(String[] args) throws Exception {
    // database connection
    Class.forName("org.postgresql.Driver");

    Connection jdbcConnection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/*******", "********", "********");
    IDatabaseConnection connection = new DatabaseConnection(jdbcConnection);
    connection.getConfig().setProperty(DatabaseConfig.FEATURE_QUALIFIED_TABLE_NAMES, true);

    exportDatabase(connection);
}

private static void exportDatabase(IDatabaseConnection connection) throws Exception {
    // full database export
    IDataSet fullDataSet = connection.createDataSet();
    FlatXmlDataSet.write(fullDataSet, new FileOutputStream("full.xml"));
}
}

问题是我仍然遇到相同的错误,我不知道为什么,因为应该通过将限定的表名设置为true来解决该错误?有人知道我在做什么错吗?

1 个答案:

答案 0 :(得分:0)

问题在于JDBC驱动程序的方法比较错误: haveMinimumServerVersion(String ver)link to bug)。我通过在我的maven依赖项中使用排除来解决此问题:

<dependency>
    <groupId>org.dbunit</groupId>
    <artifactId>dbunit</artifactId>
    <version>2.6.0</version>
    <exclusions>
        <exclusion>
            <groupId>postgresql</groupId>
            <artifactId>postgresql</artifactId>
        </exclusion>
    </exclusions>
</dependency>

这解决了我的问题。我希望它可以帮助其他人。