【问题标题】:org.dbunit.database.AmbiguousTableNameExceptionorg.dbunit.database.AmbiguousTableNameException
【发布时间】:2018-05-09 07:01:53
【问题描述】:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
    <employee name = "abc" empId = "100" location = "goa" dept = "IT" />
        <facilities transport="Y" mealcard = "" driver = "Y"/>
        <reportees manager = "XXX" lead = "XXX" VP = "XXX"/>
    <employee name = "XYZ" empId = "101" location = "mombai" dept = "IT" />
        <facilities transport="Y" mealcard = "" driver = "Y"/>
        <reportees manager = "XXX" lead = "XXX" VP = "XXX"/>
    <employee name = "PQA" empId = "102" location = "delhi" dept = "IT" />
        <facilities transport="Y" mealcard = "" driver = "Y"/>
        <reportees manager = "XXX" lead = "XXX" VP = "XXX"/>

上面是我的 XML。我必须验证相同的。我正在使用 DBUnit 将相同的 XML 与其他 XML 进行比较(其他 XML 具有相同的内容但从不同的源生成)。创建数据集时,我收到“org.dbunit.database.AmbiguousTableNameException”。

我对每个 XML 标记都有 SQL 查询。例如。对于员工标签,我在 empID 上进行查询。对于我在mealCard 等上查询的设施等。我正在循环通过XML 标记。第一次迭代没有错误。我正在使用 QueryDataSet.addTable(table_name ,query) 添加表,即 xml 标签。但是当下一次迭代到来并且我试图再次添加员工标签时,我得到了上述错误。

【问题讨论】:

    标签: java xml dbunit


    【解决方案1】:

    配置模式名称,以便 dbUnit 知道使用哪个。见Why am I getting an "AmbiguousTableNameException"?

    【讨论】:

    • 是的。我读了这个。这里他们指的是模式。是那个数据库模式,那么我只处理 1 个模式,我已经在 CAPS 中提到了它。我仍然收到错误消息。
    【解决方案2】:

    我解决了这个问题。我会告诉你怎么做。在重复标签的数据集中,我只是添加了随机数,例如在我上面的 XML 员工重复标记中,因此我为数据集中的第一个实例添加了employee_123,为下一个实例添加了employee_098,这就是我设法摆脱 AmbigiousTableNameException 的方法。后来我使用 RegEx 删除了附加到员工标签的“_[randomNumber]”。代码运行成功。

    【讨论】:

      【解决方案3】:

      @DBUnit(qualifiedTableNames = true)

      这个设置帮助了我

      【讨论】: