当前位置: 首页 > 面试题库 >

Oracle + dbunit获取AmbiguousTableNameException

仲孙阳
2023-03-14
问题内容

我正在使用dbunit创建数据库备份,可以将其导入和导出。我的应用程序可以使用多个数据库引擎:MySQL,PostgreSQL,SQLServer,H2和Oracle。

上面的所有代码都可以通过以下代码正常工作:

            // Connect to the database 
        conn =BackupManager.getInstance().getConnection();
        IDatabaseConnection connection = new DatabaseConnection(conn);
        InputSource xmlSource = new InputSource(new FileInputStream(new File(nameXML)));
        FlatXmlProducer flatXmlProducer = new FlatXmlProducer(xmlSource);
        flatXmlProducer.setColumnSensing(true);

        DatabaseOperation.CLEAN_INSERT.execute(connection,new FlatXmlDataSet(flatXmlProducer));

但是在Oracle上,我遇到了以下异常:

!ENTRY es.giro.girlabel.backup 1 0 2012-04-11 11:51:40.542
!MESSAGE Start import backup
org.dbunit.database.AmbiguousTableNameException: AQ$_SCHEDULES
    at org.dbunit.dataset.OrderedTableNameMap.add(OrderedTableNameMap.java:198)
    at org.dbunit.database.DatabaseDataSet.initialize(DatabaseDataSet.java:231)
    at org.dbunit.database.DatabaseDataSet.getTableMetaData(DatabaseDataSet.java:281)
    at org.dbunit.operation.DeleteAllOperation.execute(DeleteAllOperation.java:109)
    at org.dbunit.operation.CompositeOperation.execute(CompositeOperation.java:79)
    at es.giro.girlabel.backup.ImportBackup.createData(ImportBackup.java:39)
    at es.giro.girlabel.backup.handlers.Import.execute(Import.java:45)

问题答案:

从文档:

public class AmbiguousTableNameException extends DataSetException

IDataSet当可访问具有相同名称的多个表时,抛出此异常。当数据库连接可以访问包含相同表名的多个模式时,通常会发生这种情况。

可能的解决方案:

1)使用只能访问一个数据库模式的数据库连接凭据。

2)为DatabaseConnectionDatabaseDataSourceConnection构造函数指定架构名称 。

3)启用合格的表名支持(请参阅操作方法文档)。



 类似资料:
  • 我试图创建一个简单的SpringBoot DB单元存储库测试,但我得到了一个: NoSuchBeanDefinitionException:没有类型为“example”的限定bean。ItemRepository'可用:至少需要1个符合autowire候选条件的bean。依赖项注释:{@org.springframework.beans.factory.annotation.Autowired(r

  • DbUnit 使您可以容易地执行 JDBC 查询并获取它们的值。使用 DbUnit JDBC 包装器而不是纯粹的 JDBC 有几个理由: 可以用 SQL 查询创建一个 Dataset ,并使用 DbUnit 的 assertion(断言)方法(在后面描述)。 可以用 SQL 查询创建一个 Dataset ,并将它保存为一个 FlatXmlDataSet 。可以在以后将它重新装载到数据库中。 可以容

  • Spring DBUnit 提供了 Spring 测试框架和 DBUnit 项目,允许你通过注解来实现测试的一些准备工作。 示例代码: @RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class

  • 问题内容: 我有一个这样的表: 因此,(ID,KEY)元组可以视为主键。 我试图返回这样的行: 因此,除了通过对每列进行子选择之外,如何才能抓住键值(如果有的话)并将它们收集到我的单行中?到目前为止,我尝试过的是: 但是出于明显的原因,此操作会为每个匹配的键返回一行,而不是每个id返回一行。 我该如何以自己想要的方式进行操作? 谢谢! 问题答案: 您可以在任何版本的Oracle中旋转这样的数据。

  • 我正在尝试在我的 Glassfish 4 中建立 JDBC 连接,但它抱怨当我 ping 它时 URL 不正确。 到目前为止,我已经将ojdbc6.jar和ojdbc7.jar文件复制到Glassfish 4中 我的常规设置如下所示: 我的附加属性如下所示: 在我的Oracle Devloper中,我的设置如下所示: 知道我做错了什么吗?我错过了斜线还是什么?

  • 问题内容: 我想知道如何使用Java获取解释计划。我之所以需要它,是因为我们有一个特殊用户可以编写报告的框架。这些报告有时会生成大量查询,我们想在其中动态解释并存储其成本。这样,我们可以稍后分析高成本查询并进行优化。 给我非法列异常的示例代码: 问题答案: 用这个: