org.dbunit.database.AmbiguousTableNameException异常

org.dbunit.database.AmbiguousTableNameException

在jeesite数据库初始化中,发现报上述异常:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.7:
run (default-cli) on project jeesite: An Ant BuildException has occured: org.dbu
nit.database.AmbiguousTableNameException: ACT_GE_BYTEARRAY
[ERROR] around Ant part ...... @ 24:107 in D:\jeesite\th
inkgem-jeesite-cedd6b2\target\antrun\build-main.xml

1、异常原因

数据库中存在两个表名相同的表,可能SCHEMA名不同。

通过SQL语句可以查询到是哪两个SCHEMA下的表名重名:

select * from dba_tables where table_name like '%ACT_GE_BYTEARRAY%';

或者

select * from all_tables where table_name like '%ACT_GE_BYTEARRAY%';


OWNER    TABLE_NAME    TABLESPACE_NAME    CLUSTER_NAME
ACTIVITI    ACT_GE_BYTEARRAY    ACTIVITI    
JEESITE    ACT_GE_BYTEARRAY    JEESITE   

原来是ACTIVITI中已经导入过名为“ACT_GE_BYTEARRAY”的表。

2、解决

因为SQL语句不好修改,若能修改,加上SCHEMA名或OWNER名应能消除该问题。

一种解决方法是,缩窄当前数据库用户的访问权限,从dba角色降级为connect和resource角色。只能访问自己的schema下的表,从而避免表名重复。



附加知识:

(1)Oracle角色、权限的一些常用视图

ORACLE中数据字典视图分为3大类, 用前缀区别,分别为:USER,ALL 和DBA,许多数据字典视图包含相似的信息。

USER_*:有关用户所拥有的对象信息,即用户自己创建的对象信息

ALL_*:有关用户可以访问的对象的信息,即用户自己创建的对象的信息加上其他用户创建的对象但该用户有权访问的信息

DBA_*:有关整个数据库中对象的信息

         DBA_*>= ALL_*>= USER_*

(2)系统权限分类:

DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
对于普通用户:授予connect, resource权限。
对于DBA管理用户:授予connect,resource, dba权限。


你可能感兴趣的:(JavaApp,Database)