Oracle + dbunit获取AmbiguousTableNameException [英] Oracle + dbunit gets AmbiguousTableNameException

查看:164
本文介绍了Oracle + dbunit获取AmbiguousTableNameException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am using dbunit to create database backups, which can be imported and exported. My application can use several database engines: MySQL, PostgreSQL, SQLServer, H2 and Oracle.

上述所有工作都可以使用以下代码:

All of the above work fine with the following code:

            // 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上我得到了这个例外:

But on Oracle I get this exception:

!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)


推荐答案

来自 docs


public class AmbiguousTableNameException extends DataSetException

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

This exception is thrown by IDataSet when multiple tables having the same name are accessible. This usually occurs when the database connection have access to multiple schemas containing identical table names.

可能的解决方案:

1)使用只有一个
访问权限的数据库连接凭证数据库模式。

1) Use a database connection credential that has access to only one database schema.

2)指定
DatabaseConnection DatabaseDataSourceConnection 构造函数。

2) Specify a schema name to the DatabaseConnection or DatabaseDataSourceConnection constructor.

3)启用限定表名称支持(请参阅操作方法文档)。

3) Enable the qualified table name support (see How-to documentation).

这篇关于Oracle + dbunit获取AmbiguousTableNameException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆