dbunit 用来做数据库数据的导入导出


DatabaseOperation
DatabaseOperation.UPDATE:这个操作将从测试数据源中读取的数据集的内容更新到数据库中,注意这个操作正确执行的前提是测试

数据表已经存在,如果不存在这个测试用例将会失败
DatabaseOperation.INSERT:这个操作把从测试数据源中读取的数据集的内容插入到数据库中,注意这个操作正确执行的前提是测试

数据表不存在,这个操作将新建数据表。如果测试数据表已经存在这个测试用例将会失败。另外,在执行这个操作的时候要特别注意

数据集中数据表的顺序,否则可能会因为违反外键约束而造成测试用例失败
DatabaseOperation.DELETE:这个操作会从数据库中删除数据,注意,这个操作只删除数据集中存在的数据行而不是整个数据表中的

数据
DatabaseOperation.DELETE_ALL:这个操作删除数据表中的所有行,注意,这个操作也只影响数据集中声明了的数据表,数据集中没

有涉及到的数据表中的数据不会删除
DatabaseOperation.TRUNCATE:这个操作将删除数据集中声明的数据表,如果数据中有些表并没有在预定义的数据集中提到,这个数

据表将不会被影响。注意,这个操作是按照相反的顺序执行的
DatabaseOperation.REFRESH:顾名思义,这个操作将把预定义数据集中的数据同步到数据库中,也就是说这个操作将更新数据数中已

有的数据、插入数据库中没有的数据。数据库中已有的、但是数据集中没有的行将不会被影响。我们用一个产品数据库的拷贝进行测

试的时候可以使用这个操作将预定义数据同步到产品数据库中
DatabaseOperation.CLEAN_INSERT:删除所有的数据表中的数据,然后插入数据集中定义的数据,如果你想保证数据库是受控的,这

个你会比较喜欢。
DatabaseOperation.NONE:不执行任何操作
CompositeOperation:将多个操作组合成一个,便以维护和重用
TransactionOperation:在一个事物内执行多个操作
IdentityInsertOperation:在使用MSSQL的时候,插入数据时IDENTITY列我们是没有办法控制的,用这个就可以控制了,只有在使用MSSQL的时候才会用得到

 

 

 

比较有用的文档地址:

http://www.dbunit.org/faq.html#streaming

http://www.dbunit.org/properties.html#qualifiedtablenames

http://www.dbunit.org/components.html#streamingdataset

  1. package dbunit;      

  2. import java.io.FileNotFoundException;   
  3. import java.io.FileOutputStream;   
  4. import java.io.IOException;   
  5. import java.sql.Connection;   
  6. import java.sql.DriverManager;   
  7. import java.sql.SQLException;   
  8. import java.util.HashSet;   
  9. import java.util.Iterator;   
  10. import java.util.Map;   
  11. import java.util.Set;   
  12.   
  13. import org.dbunit.DatabaseUnitException;   
  14. import org.dbunit.database.DatabaseConfig;   
  15. import org.dbunit.database.DatabaseConnection;   
  16. import org.dbunit.database.ForwardOnlyResultSetTableFactory;   
  17. import org.dbunit.database.IDatabaseConnection;   
  18. import org.dbunit.database.QueryDataSet;   
  19. import org.dbunit.dataset.CachedDataSet;   
  20. import org.dbunit.dataset.DataSetException;   
  21. import org.dbunit.dataset.IDataSet;   
  22. import org.dbunit.dataset.stream.IDataSetProducer;   
  23. import org.dbunit.dataset.stream.StreamingDataSet;   
  24. import org.dbunit.dataset.xml.FlatXmlDataSet;   
  25. import org.dbunit.dataset.xml.FlatXmlProducer;   
  26. import org.dbunit.dataset.xml.XmlDataSet;   
  27. import org.dbunit.dataset.xml.XmlProducer;   
  28. import org.dbunit.operation.DatabaseOperation;   
  29. import org.xml.sax.InputSource;   
  30.   
  31. public abstract class DBXMLHelper {   
  32.   
  33.     // partial database export   
  34.     public static void exportPartial(IDatabaseConnection connection,   
  35.             String fileName, Set tableNames, Map sqls, boolean streamed,   
  36.             boolean flat) throws SQLException, DataSetException,   
  37.             FileNotFoundException, IOException {   
  38.         connection.getConfig().setFeature(   
  39.                 DatabaseConfig.FEATURE_QUALIFIED_TABLE_NAMES, true);   
  40.         if (streamed)   
  41.             connection.getConfig().setProperty(   
  42.                     DatabaseConfig.PROPERTY_RESULTSET_TABLE_FACTORY,   
  43.                     new ForwardOnlyResultSetTableFactory());   
  44.   
  45.         QueryDataSet partialDataSet = new QueryDataSet(connection);   
  46.         // all data   
  47.         if (null != tableNames)   
  48.             for (Iterator it = tableNames.iterator(); it.hasNext();) {   
  49.                 partialDataSet.addTable((String) it.next());   
  50.             }   
  51.         // sql query   
  52.         if (null != sqls)   
  53.             for (Iterator it = sqls.keySet().iterator(); it.hasNext();) {   
  54.                 String key = (String) it.next();   
  55.                 partialDataSet.addTable(key, (String) sqls.get(key));   
  56.             }   
  57.   
  58.         if (flat)   
  59.             FlatXmlDataSet   
  60.                     .write(partialDataSet, new FileOutputStream(fileName));   
  61.         else  
  62.             XmlDataSet.write(partialDataSet, new FileOutputStream(fileName));   
  63.     }   
  64.   
  65.     // full database export   
  66.     public static void exportDatabase(IDatabaseConnection connection,   
  67.             String fileName, boolean streamed, boolean flat)   
  68.             throws SQLException, DatabaseUnitException, FileNotFoundException,   
  69.             IOException {   
  70.         if (streamed)   
  71.             connection.getConfig().setProperty(   
  72.                     DatabaseConfig.PROPERTY_RESULTSET_TABLE_FACTORY,   
  73.                     new ForwardOnlyResultSetTableFactory());   
  74.   
  75.         IDataSet fullDataSet = connection.createDataSet();   
  76.         if (flat)   
  77.             FlatXmlDataSet.write(fullDataSet, new FileOutputStream(fileName));   
  78.         else  
  79.             XmlDataSet.write(fullDataSet, new FileOutputStream(fileName));   
  80.     }   
  81.   
  82.     public static void refreshData(IDatabaseConnection connection,   
  83.             String input, boolean streamed, boolean flat)   
  84.             throws DatabaseUnitException, SQLException {   
  85.         // 把Documenth转换为DBUnit的DataSet并解决中文编码问题   
  86.         // is.setEncoding("GBK");   
  87.         IDataSetProducer producer;   
  88.         IDataSet dataSet;   
  89.         if (flat)   
  90.             producer = new FlatXmlProducer(new InputSource(input));   
  91.         else  
  92.             producer = new XmlProducer(new InputSource(input));   
  93.         if (streamed)   
  94.             dataSet = new StreamingDataSet(producer);   
  95.         else  
  96.             dataSet = new CachedDataSet(producer);   
  97.   
  98.         // 执行插入操作   
  99.         DatabaseOperation.REFRESH.execute(connection, dataSet);   
  100.     }   
  101.   
  102.     public static void cleanInsertData(IDatabaseConnection connection,   
  103.             String input, boolean flat) throws DatabaseUnitException,   
  104.             SQLException {   
  105.         IDataSetProducer producer;   
  106.         IDataSet dataSet;   
  107.         if (flat)   
  108.             producer = new FlatXmlProducer(new InputSource(input));   
  109.         else  
  110.             producer = new XmlProducer(new InputSource(input));   
  111.   
  112.         dataSet = new CachedDataSet(producer);   
  113.   
  114.         // 执行插入操作   
  115.         DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);   
  116.     }   
  117.   
  118. }   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值