dbunit使用例子
2014-03-25 14:20
323 查看
1.dbunit从名字上可以看出,是对有关数据库操作的测试。官网:www.dbunit.org从官网下载dbunit相关的jar包,dbunit还依赖于http://www.slf4j.org和commons-logging.jar,所以也需要下载slf4j,使用它的slf4j-api-1.5.3.jar和slf4j-jcl-1.5.3.jar。
需要注意的是dbunit_xx.jar的版本和数据区库驱动包的版本以及本地jdk的版本
本例用的是:jdk6,dbunit-2.4.9.jar, ojdbc6.jar , slf4j-api-1.5.3.jar , slf4j-jcl-1.5.3.jar。
dbunit的原理是:它会把数据库表里的数据和一个xml文件里表示的数据关联起来。也就是说 数据库表里的数据可以导出到一个对应的xml里,同时也可以将一个xml里的数据导入到数据库表里。是相互转换的。
数据库表里的数据<===>xml文件
DatabaseOperation.UPDATE:这个操作将从测试数据源中读取的数据集的内容更新到数据库中,注意这个操作正确执行的前提是测试数据表已经存在,如果不存在这个测试用例将会失败
DatabaseOperation.INSERT:这个操作把从测试数据源中读取的数据集的内容插入到数据库中,注意这个操作正确执行的前提是测试数据表不存在,这个操作将新建数据表。如果测试数据表已经存在这个测试用例将会失败。另外,在执行这个操作的时候要特别注意数据集中数据表的顺序,否则可能会因为违反外键约束而造成测试用例失败
DatabaseOperation.DELETE:这个操作会从数据库中删除数据,注意,这个操作只删除数据集中存在的数据行而不是整个数据表中的数据
DatabaseOperation.DELETE_ALL:这个操作删除数据表中的所有行,注意,这个操作也只影响数据集中声明了的数据表,数据集中没有涉及到的数据表中的数据不会删除
DatabaseOperation.TRUNCATE:这个操作将删除数据集中声明的数据表,如果数据中有些表并没有在预定义的数据集中提到,这个数据表将不会被影响。注意,这个操作是按照相反的顺序执行的
DatabaseOperation.REFRESH:顾名思义,这个操作将把预定义数据集中的数据同步到数据库中,也就是说这个操作将更新数据数中已有的数据、插入数据库中没有的数据。数据库中已有的、但是数据集中没有的行将不会被影响。我们用一个产品数据库的拷贝进行测试的时候可以使用这个操作将预定义数据同步到产品数据库中
DatabaseOperation.CLEAN_INSERT:删除所有的数据表中的数据,然后插入数据集中定义的数据,如果你想保证数据库是受控的,这个你会比较喜欢。
DatabaseOperation.NONE:不执行任何操作
CompositeOperation:将多个操作组合成一个,便以维护和重用
TransactionOperation:在一个事物内执行多个操作
IdentityInsertOperation:在使用MSSQL的时候,插入数据时IDENTITY列我们是没有办法控制的,用这个就可以控制了,只有在使用MSSQL的时候才会用得到
可以做个测试如下:
package dbunit;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import org.dbunit.database.*;
import org.dbunit.dataset.xml.FlatXmlDataSet;
public class Testdbunit {
public void testexport{
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.72:1521:orcl", "PAYGATEWAY", "PAYGATEWAY");
IDatabaseConnection connection = new DatabaseConnection(conn);
QueryDataSet dataSet = new QueryDataSet(connection);
//将整个person表里的数据导出到 xml文件里
//dataSet.addTable("mg");
//将users表里符合条件的数据导出到xml文件里
dataSet.addTable("mg_pay_merchant","select * from mg_pay_merchant where id=10100");
//导出到dbunit.xml文件里
FlatXmlDataSet.write(dataSet,new FileOutputStream("d:/mg_pay_merchant.xml"));
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* 插入数据
* */
//@Test
public void testinsert(){
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.72:1521:orcl", "PAYGATEWAY", "PAYGATEWAY");
IDatabaseConnection connection = new DatabaseConnection(conn);
//准备数据的读入 gbk、gb2312生成的xml文件才能被正确解析
IDataSet dataSet2 = new FlatXmlDataSet( new FileInputStream("d:/mg_pay_merchant2.xml"));
DatabaseOperation.CLEAN_INSERT.execute(connection,dataSet2);
} catch (Exception e) {
e.printStackTrace();
}
}
}
需要注意的是dbunit_xx.jar的版本和数据区库驱动包的版本以及本地jdk的版本
本例用的是:jdk6,dbunit-2.4.9.jar, ojdbc6.jar , slf4j-api-1.5.3.jar , slf4j-jcl-1.5.3.jar。
dbunit的原理是:它会把数据库表里的数据和一个xml文件里表示的数据关联起来。也就是说 数据库表里的数据可以导出到一个对应的xml里,同时也可以将一个xml里的数据导入到数据库表里。是相互转换的。
数据库表里的数据<===>xml文件
DatabaseOperation.UPDATE:这个操作将从测试数据源中读取的数据集的内容更新到数据库中,注意这个操作正确执行的前提是测试数据表已经存在,如果不存在这个测试用例将会失败
DatabaseOperation.INSERT:这个操作把从测试数据源中读取的数据集的内容插入到数据库中,注意这个操作正确执行的前提是测试数据表不存在,这个操作将新建数据表。如果测试数据表已经存在这个测试用例将会失败。另外,在执行这个操作的时候要特别注意数据集中数据表的顺序,否则可能会因为违反外键约束而造成测试用例失败
DatabaseOperation.DELETE:这个操作会从数据库中删除数据,注意,这个操作只删除数据集中存在的数据行而不是整个数据表中的数据
DatabaseOperation.DELETE_ALL:这个操作删除数据表中的所有行,注意,这个操作也只影响数据集中声明了的数据表,数据集中没有涉及到的数据表中的数据不会删除
DatabaseOperation.TRUNCATE:这个操作将删除数据集中声明的数据表,如果数据中有些表并没有在预定义的数据集中提到,这个数据表将不会被影响。注意,这个操作是按照相反的顺序执行的
DatabaseOperation.REFRESH:顾名思义,这个操作将把预定义数据集中的数据同步到数据库中,也就是说这个操作将更新数据数中已有的数据、插入数据库中没有的数据。数据库中已有的、但是数据集中没有的行将不会被影响。我们用一个产品数据库的拷贝进行测试的时候可以使用这个操作将预定义数据同步到产品数据库中
DatabaseOperation.CLEAN_INSERT:删除所有的数据表中的数据,然后插入数据集中定义的数据,如果你想保证数据库是受控的,这个你会比较喜欢。
DatabaseOperation.NONE:不执行任何操作
CompositeOperation:将多个操作组合成一个,便以维护和重用
TransactionOperation:在一个事物内执行多个操作
IdentityInsertOperation:在使用MSSQL的时候,插入数据时IDENTITY列我们是没有办法控制的,用这个就可以控制了,只有在使用MSSQL的时候才会用得到
可以做个测试如下:
package dbunit;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import org.dbunit.database.*;
import org.dbunit.dataset.xml.FlatXmlDataSet;
public class Testdbunit {
public void testexport{
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.72:1521:orcl", "PAYGATEWAY", "PAYGATEWAY");
IDatabaseConnection connection = new DatabaseConnection(conn);
QueryDataSet dataSet = new QueryDataSet(connection);
//将整个person表里的数据导出到 xml文件里
//dataSet.addTable("mg");
//将users表里符合条件的数据导出到xml文件里
dataSet.addTable("mg_pay_merchant","select * from mg_pay_merchant where id=10100");
//导出到dbunit.xml文件里
FlatXmlDataSet.write(dataSet,new FileOutputStream("d:/mg_pay_merchant.xml"));
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* 插入数据
* */
//@Test
public void testinsert(){
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.72:1521:orcl", "PAYGATEWAY", "PAYGATEWAY");
IDatabaseConnection connection = new DatabaseConnection(conn);
//准备数据的读入 gbk、gb2312生成的xml文件才能被正确解析
IDataSet dataSet2 = new FlatXmlDataSet( new FileInputStream("d:/mg_pay_merchant2.xml"));
DatabaseOperation.CLEAN_INSERT.execute(connection,dataSet2);
} catch (Exception e) {
e.printStackTrace();
}
}
}
相关文章推荐
- 常用的一些javascript小技巧
- javascript事件冒泡的一种解决方案
- 2014.3.18数据仓库 模糊查询 谷歌
- 2014.3.19浅谈数据库的模糊查询与优化查询
- AvAudioRecoder
- 孤陌山水间,时光莫追
- 第二章作业
- jquery与弹出层控制
- pcs命令使用
- lua-resty-websocket安装和测试
- 项目一——设计默认构造函数
- ML一些简单的资源
- 第五周 项目一 拓展4 自定义一个 矩形类
- lua-resty-websocket安装和测试
- cscope无法索引代码树之外的软链接
- linux时间同步,ntpd、ntpdate
- 五周 项目1 三角形类的构造函数 .1使用带参构造函数
- python 点滴记录4:TypeError: range() integer end argument expected, got str.
- Android程序签名
- svn库迁移