org.dbunit.database.AmbiguousTableNameException异常
2016-02-23 19:21
330 查看
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 ...<dbunit userid="${jdbc.username}" driver="${jdbc.driv
er}" password="${jdbc.password}" url="${jdbc.url}">... @ 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权限。
相关文章推荐
- Java中Overload和Override的区别
- BZOJ3444: 最后的晚餐
- !!和??
- 源代码管理工具SVN的使用(一)(大体介绍)
- 日志简介
- CentOS7系统常用命令
- VS2010断点设置技巧
- leetcode笔记--Valid Palindrome
- iOS涂鸦画板 主要自定义UIView
- POJ 1442 堆的应用 优先队列
- C++学习笔记:MyString类的重载 练习
- 位运算的小技巧
- android绘图canvas.drawBitmap方法的作用
- unable to find valid certification path to requested target或Certificate chaining error的解决办法
- 待字闺中之巧妙排序分析:
- nginx源码初读(7)--让烦恼从数据结构开始(ngx_queue)
- java基础总结(四)
- 二级域名session 共享方案
- eclipse下开发java项目 -- 前端开发想使用 sublime怎么办?(借助gulp自动发布)
- Facade 设计模式