DbUnit数据备份、还原
(一) 备份代码,以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.使用streamed的导入导出减少内存消耗,使用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.使用streamed的导入导出减少内存消耗,使用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的批处理语句功能
分类: java 2,762 次阅读
原文链接:http://www.wenhq.com/article/view_98.html欢迎转载,请注明出处:亲亲宝宝