您的位置:首页 > 数据库

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

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

1、建立数据库。

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

2、关联表结构。

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

TablesDependencyHelper.getAllDependentTable(connection,mainTableName);
//这句会自动按照关联顺序导出表名,含有主键的数据会放在最前边
IDataSet dataSet = connection.createDataSet(tableNames);


3、不同数据库的支持。

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

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

IDatabaseConnection connection= new OracleConnection(conn,user);


MSSQL:由于其字段自增机制,主键是无法插入的,使用其扩展支持操作类可以解决。其表名首字母大写,需要单独处理。
org.dbunit.ext.mssql.InsertIdentityOperation.REFRESH.execute(connection,dataSet);


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

HSQLDB:由于只有数据导入,目前没有发现问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: