在spring boot框架下使用dbunit进行测试时,报错:org.dbunit.database.AmbiguousTableNameException: USER
原因
在数据库中存在两个同名的数据表,同名->不区分大小写的同名,则user和USER也是同名的,特别的是这两个同名数据表可能是存在本地中两个不同的数据库中。
jojo中的user表:

mysql中的user表

解决方法
1、重命名你当前项目的数据表,使其不与数据库中其他数据表重名,如user命名为t_user。(这是我使用的解决方法)
2、删除其他数据库中的重名数据表,使你当前数据表命名唯一。
3、假如在连接数据库时未指定到哪个具体的schema,那么就在数据库指定schema。
解决过程
首先在IDEA中对错误进行排除,dbunit的测试步骤为 1备份数据库中原数据 -> 2清空数据库并插入测试数据-> 3测试成功 -> 4根据生成的.xml文件还原数据库 ,排查可得已经在数据库中插入了测试数据,则插入是没问题的,已经找到了指定的数据库中的表,那么问题是否出在还原过程中呢?
看了一会源码,emmm,看不懂,于是开始面向百度和谷歌解决问题,最后在谷歌使用 AmbiguousTableNameException
作为关键词找到了StackOverflow上的一个答案https://stackoverflow.com/questions/10103629/oracle-dbunit-gets-ambiguoustablenameexception和一个博客http://xiajunhust.github.io/2016/07/14/DbUnit-AmbiguousTableNameException%E5%BC%82%E5%B8%B8%E8%A7%A3%E5%86%B3/,两者都说明了相关的解决方法和原因。
对AmbiguousTableNameException
这个报错关键词的解释是这样的:
public class AmbiguousTableNameException extends DataSetException.
This exception is thrown by IDataSet when multiple tables having the same name are accessible.
该异常是由 IDataSet 在可连接到多个具有相同名字的数据表时抛出。
This usually occurs when the database connection have access to multiple schemas containing identical table names.
这种情况经常出现在数据库连接连接到多个包括相同的数据表名的schema时。
然后根据该异常的出现原因,对数据表名进行改名就可以规避了。也有的解决方法是通过指定schema来解决这种情况,但是当我在spring boot和数据库进行连接的配置文件中指定schema后,spring boot容器却无法运行起来,无法对容器中的对象进行构建,所以我选择了更简单的改名来避免了重名。