(一)
备份代码,以
DbUnit2.2
版本为例;
//
获的
connection
的一个数据库连接
Connection jdbcConnection = WebDb.getConnect();
//oracle
中必须指定
Schema
,见参数“
ZFCG
”
IDatabaseConnection connection =
new
DatabaseConnection(jdbcConnection,
"ZFCG"
);
String datafile =
"d://testdata//TableTestData.xml"
;
String[] tableNames = {
"role_group"
};
IDataSet actualDataSet = connection.createDataSet(tableNames);
FlatXmlDataSet.write(actualDataSet,
new
FileOutputStream(datafile));
(二)
还原代码
Connection jdbcConnection = WebDb.getConnect();
IDatabaseConnection connection =
new
DatabaseConnection(jdbcConnection,
"ZFCG"
);
String datafile =
"d://testdata//TableTestData.xml"
;
IDataSet expectedDataSet =
new
FlatXmlDataSet(
new
FileInputStream(datafile));
DatabaseOperation.
CLEAN_INSERT
.execute(connection,expectedDataSet);
(三)
遇到问题
;
1
、
Oralce
数据中产生
AmbiguousTableNameException
的错误:
原因主要是
dbunit
中使用了
schema
,因此必须指定
schema
;数据库
schema
,相当于方案,每个数据库实例,里面可能会有多个用户,每个用户可能都有自己的表,过程等
object
,那
oracle
就会为每个用户创建一个与用户名相同的方案,就相当于
schema
。
值得注意的是,
schema
要求一定要大写的,否则会产生
NoSuchTableException
。
2
、如何提高
dbunit
的导入导出性能?
使用
dnunit
的需要注意一些和性能相关的配置。
1. 使用 streame 的导入导出减少内存消耗,使用 StreamingDataSet 读取 dataset ,处理数据导入。导出时使用配置 DbUnit 的连接使用 ForwardOnlyResultSetTable 导出数据
IDatabaseConnection connection = new DatabaseConnection(jdbcConnection, schema);
DatabaseConfig config = connection.getConfig();
config.setProperty(DatabaseConfig.PROPERTY_RESULTSET_TABLE_FACTORY, new ForwardOnlyResultSetTableFactory());
2. 明确指定导入导出的 schema
3. 如果 jdbc 支持批处理,请使用 dbunit 的批处理语句功能
1. 使用 streame 的导入导出减少内存消耗,使用 StreamingDataSet 读取 dataset ,处理数据导入。导出时使用配置 DbUnit 的连接使用 ForwardOnlyResultSetTable 导出数据
IDatabaseConnection connection = new DatabaseConnection(jdbcConnection, schema);
DatabaseConfig config = connection.getConfig();
config.setProperty(DatabaseConfig.PROPERTY_RESULTSET_TABLE_FACTORY, new ForwardOnlyResultSetTableFactory());
2. 明确指定导入导出的 schema
3. 如果 jdbc 支持批处理,请使用 dbunit 的批处理语句功能