Java DBUnit AmbigouslyTableNameException 错误抛出

标签 java sql postgresql dbunit spring-test-dbunit

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

Exception in thread "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 来解决它?有人知道我做错了什么吗?

最佳答案

问题是 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>

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

关于Java DBUnit AmbigouslyTableNameException 错误抛出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56189388/

相关文章:

java - 搜索一个属性String类型,一些带有hql的字符用于hibernate

sql - 我是否需要按照声明的顺序使用多列 SQL Server 索引?

sql - QSqlQuery bindValue 慢

c++ - 行号 0 超出范围 0..-1 LIBPQ

java - 有没有办法在 Kotlin 类的 block 注释中指定 XML 文件?

Java流。对对象流中的两个字段求和

java - Android 声音不在启动画面中播放

sql - 参数必须是在phpmyadmin中实现Countable的数组或对象

sql - 何时使用 SQL 表别名

postgresql - 组织.postgresql.util.PSQLException : ERROR: unterminated dollar-quoted string at or near "$BODY$