转:使用DBUnit测试时违反外键约束的解决办法

DBUnit是一个基于junit扩展的数据库测试框架。它提供了大量的类对与数据库相关的操作进行了抽象和封装。它会把数据库表里的数据和一个xml文件关联起来,也就是说它可以让数据在XML文件和数据库之间转换。基于这种设计模式DBUnit可以在测试之前,先备份数据库到一个临时XML文件中,然后删除数据库中的所有数据接着把我们写好的模拟数据存入数据库中,最后,在测试完毕后,删除现有数据再存入之前备份的数据,回溯到测试前的状态以达到各个单元测试互不影响的目的。

但是如果dbunit测试的数据表之间存在外键关联,那么在进行备份后删除或还原前删除数据时DBUniit无法知道应该先删除哪张表再删除哪张表因此很容易报MySQLIntegrityConstraintViolationException错误。

解决办法:DBUniit是通过jdbc的Connection对象来获取连接的,可以在URL上加上sessionVariables=foreign_key_checks=0来禁止外键约束检查。

时间: 2024-11-10 15:16:32

转:使用DBUnit测试时违反外键约束的解决办法的相关文章

truncate table时存在外键约束的解决办法

以前在使用truncate命令时遇到表存在外键引用时无法执行命令的情况都是用delete来代替,今天又遇到这个问题,于是在网上搜了一把,可以通过如下方式解决: 1.基本思路:先关闭mysql的外键约束,再执行truncate命令,然后再还原mysql的外键约束 2.打开.关闭.查看mysql的外键约束命令 禁用外键约束SET FOREIGN_KEY_CHECKS=0; 启动外键约束SET FOREIGN_KEY_CHECKS=1; 查看当前FOREIGN_KEY_CHECKS的值可用如下命令SE

Mysql 截断表时由于外键约束无法完成时的处理方法

而在MySQL?5.5中,存在外键约束的InnoDB表,在任何情况下都不允许进行Truncate操作,并报错(Error 1701),如果朋友你实在是有点强迫症,那么可以用下面的方式拐着弯解决: 导出数据库数据位.sql文件. 随便用个文本编辑器打开文件. 手动编辑一下.sql文件,怎样编辑相信你看了下面这个图就知道了 4.再将编辑好的.sql文件重新导入就OK了.

数据库使用truncate清理非常多表时碰到外键约束时怎么高速解决

问题处理思路: 1. 先将数据库中涉及到外键约束的表置为无效状态 2.待清除全然部表数据后再将外键约束的表置为可用状态 详细实现脚本: declare begin for vv_sql in (SELECT 'ALTER TABLE '|| table_name ||' DISABLE CONSTRAINT ' || CONSTRAINT_NAME alter_sql FROM USER_CONSTRAINTS where CONSTRAINT_TYPE = 'R') loop execute

MySQL 关闭子表的外键约束检察

准备: 定义一个教师表.一个学生表:在学生表中引用教师表ID create table teachers(teacherID int not null auto_increment primary key,teacherName varchar(8)); create table students(studentID int not null auto_increment primary key,teacherID int not null,studentName varchar(8), con

未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值。

来源:http://www.cnblogs.com/JuneZhang/archive/2013/01/10/2853981.html 今天运行项目,提示“未能启用约束.一行或多行中包含违反非空.唯一或外键约束的值.”的异常信息. 在网上找了查了一些原因:http://www.cnblogs.com/muzihai1988/archive/2011/05/04/2036502.html 原因分析:强类型的DataTable和SQL语句查询出的结果不匹配. 简单说就是强类型的DataTable比S

Oracle存储过程update受外键约束的主键值时完整性冲突解决方案

1.问题背景 虽然在数据库操作中我们并不提倡修改主键,但是确实在实际生活中有这样的业务需求: 表A有主键KA,表B中声明了一个references A(KA)的外键约束,我们需要修改A中某条目KA的值并且更新B中外键约束. 但是DBMS在执行了第一条update后检查完整性会发现冲突:B中条目的外键不存在. 注:我在Oracle database环境下遇到这个问题的,Oracle很蛋疼的不能设置外键为update级连,所以只有人工处理. 2.举例说明 用一个简单的例子说明,数据库中有以下三个表:

MySQL外键约束

如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表. 外键是用来保证数据的完整性和一致性,通过外键的检查而使不正确的删除,插入操作失败. 不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松. 触发器同样也能完成修改或者删除操作的级联操作,2者的区别如下(自己的理解): 1.触发器会更耗资源,对原表的操作和对从表的级联操作是在一个事务中的. 2.表的数据量不大,结构不复杂时优先考虑外键约束. 3.触发器比外键约

补12.关于mysql的外键约束

一.什么是mysql中的外键(froeign key) 假如说有两张表,其中一张表的某个字段指向了另一张表的主键,这就可以称之为外键(froeign key). 在子表中增加一条记录时,需要确定是否有与父表相对应的记录. 如果父表没有对应的记录,那么子表(从表)无法插入这条数据. 下面是一个关于外键的示例: 1.首先创建一个主表,这个主表存放了班级信息. create table class ( id TINYINT PRIMARY KEY auto_increment, class_name

外键约束

如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表.外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松.这里以MySQL为例,总结一下3种外键约束方式的区别和联系. 外键约束对子表的含义: 如果在父表中找不到候选键,则不允许在子表上进行insert/update 外键约束对父表的含义: 在父表上进行update/delete以更新或删除在子表中有一条或多条对应匹配行的候选键时,父表