DBUnit在应用间导出导入数据

王朝java/jsp·作者佚名  2006-01-09
宽屏版  字体: |||超大  

应用间的数据集成(EAI)通常是两条路子:

一是使用现成的EAI、ETL框架,定义一堆XML格式的映射文件,再写一些特殊转换的transform class,但这样的工程通常比较宏大散乱,用到最后经常会发觉还不如自己写程序快。

二是直接自己写程序用JDBC->SQL转换,快则快矣,但经常会写的比较乱、特别是列数多的时候。

所以,我又会用万能老倌DBUnit+Dom4j,自己写程序来导出导入。

DBUnit因为具有xml<-->database的功能,所以很多地方都能够担任。用XML来写EAI,比SQL语句清晰,而且效果和写映射文件差不多,但因为都写在程序里,不用映射文件、提取数据定义文件、转换类翻来覆去四处看。

另外,它本身带了REFRESH(如果不存在就插入,否则就更新,以主键为依据), CLEAN_INSERT(全部删除再插入,和ReFresh比,会把不在XML中的数据删除)等几种操作,又简省了编程的功夫。

例子代码:

//Dom4j创建Document并向其赋值

Document document = DocumentHelper.createDocument();

document.addElement("dataset");

Element root = document.getRootElement();

while(rs.next())

{

item.attribute("bs").setValue(rs.getString("orderItemNo"));

root.add(item.createCopy());

}

//把Documenth转换为DBUnit的DataSet并解决中文编码问题

InputSource is = new DocumentSource(document).getInputSource();

is.setEncoding("GBK");

IDataSet dataSet = new FlatXmlDataSet(is);

//建立DBUnit数据库连接

Connection conn = .....;

DatabaseConnection dbCon = new DatabaseConnection(conn);

//执行插入操作

DatabaseOperation.INSERT.execute(dbCon, dataSet);

另外,因为目标数据库中有很多不明所以的列(约200个),不填呢又会出错,填呢又不知道填什么。所以,我先用DBUnit对它进行了采样,item是从目标数据库得到的一个样本,建立Document的过程中,我不断使用item.createCopy()把这条样本克隆出来。只置换了其中小部分源数据库中的需要更改的值。又是DbUnit的一个Bonus。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有