一个通用的单元测试框架的思考和设计07-实现篇-自动管理测试数据-如何为自增长主键id赋值

项目中使用SQL Server2008做为数据库,表的主键大都设置为identity自增长类型,用dbunit准备数据时却遇到了问题,准备的测试数据插入不到数据中,因为id的类型为自增长,不允许为其手动赋值,如何解决?

查看了dbunit的文档,对于MS SQL的自增长主键,提供了一个InsertIdentityOperation类,用这个类就可以解决手动输入主键id的问题

具体实现:在setUp和teraDown操作中替换一下默认的DatabaseOperation类

databaseTester.setSetUpOperation(InsertIdentityOperation.REFRESH);
databaseTester.setTearDownOperation(InsertIdentityOperation.DELETE);



在 Oracle 中,可以使用序列(Sequence)触发器(Trigger)来实现主键自增长。 1. 创建序列 序列是一种对象,它可以生成唯一的数字序列。可以使用以下语法创建序列: ``` CREATE SEQUENCE sequence_name START WITH 1 INCREMENT BY 1 MAXVALUE 999999999999999999999999999 MINVALUE 1 NOCYCLE NOCACHE ``` - `START WITH`:指定序列的起始,默认为1。 - `INCREMENT BY`:指定序列每次加的,默认为1。 - `MAXVALUE`:指定序列的最大,超过最大后会抛出错误。 - `MINVALUE`:指定序列的最小,低于最小后会抛出错误。 - `NOCYCLE`:表示当序列超过最大或低于最小不会循环。 - `NOCACHE`:表示不会缓存序列。 2. 创建触发器 触发器是一种特殊的存储过程,它在数据库中的表上自动执行。可以使用以下语法创建触发器: ``` CREATE OR REPLACE TRIGGER trigger_name BEFORE INSERT ON table_name FOR EACH ROW BEGIN SELECT sequence_name.NEXTVAL INTO :new.id FROM dual; END; ``` - `BEFORE INSERT ON`:指定触发器在插入数据之前执行。 - `FOR EACH ROW`:表示每行数据都会执行触发器。 - `SELECT sequence_name.NEXTVAL INTO :new.id FROM dual;`:该语句会获取下一个序列,并将其赋值给新插入的行的主键列。 3. 测试 创建完序列触发器后,就可以测试主键自增长功能。可以使用以下语法插入数据: ``` INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...); ``` 当插入数据时,主键列的将由触发器自动生成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值