使用DBUnit进行数据库备份与恢复

来源:互联网 发布:财经杂志知乎 编辑:程序博客网 时间:2024/04/28 02:49

最近主要使用DBUnit进行跨数据库备份恢复,一方面用于单元测试,另一方面也用于快速导入初始数据。遇到的问题有:

1、建立数据库。

DBUnit可以使用DTD结构存储数据库结构,但是貌似结构不可以恢复,所以使用了Hibernate的DDL恢复数据库结构。

2、关联表结构。

数据库需要按照关联表结构从低到高依次插入,否则外键关联时无法插入。在导出备份数据时,需要按照次序导出。代码如下:


3、不同数据库的支持。

DBUnit数据库扩展支持里包含了几种主流数据库,其支持包括了不同数据库的数据库连接、数据库字段类型等。

 

ORACLE:由于数据库存在多用户多表空间,所以不管是在备份还是恢复时,其连接都需要指定schema,即登陆用户名。在恢复数据时,对于二进制数据还可能出现BLOB或者CLOB相关的错误,使用其扩展连接基本可以解决。其表名全部是大写,需要单独处理。

MSSQL:由于其字段自增机制,主键是无法插入的,使用其扩展支持操作类可以解决。其表名首字母大写,需要单独处理。 

 

MYSQL:MYSQL在备份数据时,布尔字段值为true或者false。但不管是ORACLE还是MSSQL,布尔型的存储都是数字类型(NUMBER、Tinyint,通过Hibernate-ddl建立)。DBUnit在恢复true或者false值到ORACLE及MSSQL时把true或false转换成数字型,目前没有找到解决方案,只好把导出数据的true及false改成1和0。

HSQLDB:由于只有数据导入,目前没有发现问题。