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
-
package dbunit;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.SQLException;
- import java.util.HashSet;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.Set;
- import org.dbunit.DatabaseUnitException;
- import org.dbunit.database.DatabaseConfig;
- import org.dbunit.database.DatabaseConnection;
- import org.dbunit.database.ForwardOnlyResultSetTableFactory;
- import org.dbunit.database.IDatabaseConnection;
- import org.dbunit.database.QueryDataSet;
- import org.dbunit.dataset.CachedDataSet;
- import org.dbunit.dataset.DataSetException;
- import org.dbunit.dataset.IDataSet;
- import org.dbunit.dataset.stream.IDataSetProducer;
- import org.dbunit.dataset.stream.StreamingDataSet;
- import org.dbunit.dataset.xml.FlatXmlDataSet;
- import org.dbunit.dataset.xml.FlatXmlProducer;
- import org.dbunit.dataset.xml.XmlDataSet;
- import org.dbunit.dataset.xml.XmlProducer;
- import org.dbunit.operation.DatabaseOperation;
- import org.xml.sax.InputSource;
- public abstract class DBXMLHelper {
- // partial database export
- public static void exportPartial(IDatabaseConnection connection,
- String fileName, Set tableNames, Map sqls, boolean streamed,
- boolean flat) throws SQLException, DataSetException,
- FileNotFoundException, IOException {
- connection.getConfig().setFeature(
- DatabaseConfig.FEATURE_QUALIFIED_TABLE_NAMES, true);
- if (streamed)
- connection.getConfig().setProperty(
- DatabaseConfig.PROPERTY_RESULTSET_TABLE_FACTORY,
- new ForwardOnlyResultSetTableFactory());
- QueryDataSet partialDataSet = new QueryDataSet(connection);
- // all data
- if (null != tableNames)
- for (Iterator it = tableNames.iterator(); it.hasNext();) {
- partialDataSet.addTable((String) it.next());
- }
- // sql query
- if (null != sqls)
- for (Iterator it = sqls.keySet().iterator(); it.hasNext();) {
- String key = (String) it.next();
- partialDataSet.addTable(key, (String) sqls.get(key));
- }
- if (flat)
- FlatXmlDataSet
- .write(partialDataSet, new FileOutputStream(fileName));
- else
- XmlDataSet.write(partialDataSet, new FileOutputStream(fileName));
- }
- // full database export
- public static void exportDatabase(IDatabaseConnection connection,
- String fileName, boolean streamed, boolean flat)
- throws SQLException, DatabaseUnitException, FileNotFoundException,
- IOException {
- if (streamed)
- connection.getConfig().setProperty(
- DatabaseConfig.PROPERTY_RESULTSET_TABLE_FACTORY,
- new ForwardOnlyResultSetTableFactory());
- IDataSet fullDataSet = connection.createDataSet();
- if (flat)
- FlatXmlDataSet.write(fullDataSet, new FileOutputStream(fileName));
- else
- XmlDataSet.write(fullDataSet, new FileOutputStream(fileName));
- }
- public static void refreshData(IDatabaseConnection connection,
- String input, boolean streamed, boolean flat)
- throws DatabaseUnitException, SQLException {
- // 把Documenth转换为DBUnit的DataSet并解决中文编码问题
- // is.setEncoding("GBK");
- IDataSetProducer producer;
- IDataSet dataSet;
- if (flat)
- producer = new FlatXmlProducer(new InputSource(input));
- else
- producer = new XmlProducer(new InputSource(input));
- if (streamed)
- dataSet = new StreamingDataSet(producer);
- else
- dataSet = new CachedDataSet(producer);
- // 执行插入操作
- DatabaseOperation.REFRESH.execute(connection, dataSet);
- }
- public static void cleanInsertData(IDatabaseConnection connection,
- String input, boolean flat) throws DatabaseUnitException,
- SQLException {
- IDataSetProducer producer;
- IDataSet dataSet;
- if (flat)
- producer = new FlatXmlProducer(new InputSource(input));
- else
- producer = new XmlProducer(new InputSource(input));
- dataSet = new CachedDataSet(producer);
- // 执行插入操作
- DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);
- }
- }