当前位置:首页 > 开发 > 系统架构 > 架构 > 正文

dbunit入门 (一)基础实例

发表于: 2013-12-14   作者:alleni123   来源:转载   浏览次数:
摘要: 1. 首先导入包。 在pom.xml中加入依赖 <dependency> <groupId>org.dbunit</groupId> <artifactId>dbunit</artifactId> <version>2.4.9</version> <scop
1. 首先导入包。
在pom.xml中加入依赖

<dependency>
				<groupId>org.dbunit</groupId>
				<artifactId>dbunit</artifactId>
				<version>2.4.9</version>
				<scope>test</scope>
			</dependency>


此时会导入三个包, dbunit, slf4j和commons-collections

2.创建dbunit的数据xml文件

dbunit在创建数据库的时候是根据我们的数据xml文件的内容来创建的。
所以这个文件是必不可少的。
格式如下:
<?xml version="1.0" encoding="utf-8"?>
<dataset>
<!-- 这是基于属性的节点存储方式 -->
  <tablename column_name="data" column_name2="data2"/>
  
  <t_user id="1" username="alleni" password="123"/>
  <!-- 一个xml文件可以存放多个数据库table的内容-->

</dataset>


3. 创建dbunit的connection
dbunit需要一个连接数据库的connection,这个connection必须是当前项目的。

public class DbUtil {
	public static Connection getCon(){
		Connection con=null;
				try {
					con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","admin","123");
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				return con;
	}


	@Test
	public void testLoad() throws DatabaseUnitException{
		IDatabaseConnection con=new DatabaseConnection(DbUtil.getCon());
		System.out.println(con);
	}


[color=red]note: 这里可能会遇到SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
解决方法是加入dependecy

<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-simple</artifactId>
	<version>1.7.5</version>
</dependency>
            
[/color]



4.通过xml数据文件获取DataSet对象。

	@Test
	public void testLoad() throws DatabaseUnitException{
		
		
		IDatabaseConnection con=new DatabaseConnection(DbUtil.getCon());
		System.out.println(con);
		
		
		
		/*
		 * FlatXmlDataSet用来获取基于属性存储的属性值
		 * 
		 */
		
		IDataSet ds=new FlatXmlDataSet(new FlatXmlProducer(new InputSource(TestDbunit.class.getClassLoader().getResourceAsStream("t_user.xml"))));
		
		System.out.println(ds);
	}



5.执行DatabaseOperation的execute,进行数据库操作。

@Test
	public void testLoad() throws DatabaseUnitException{
		
		
		IDatabaseConnection con=new DatabaseConnection(DbUtil.getCon());
		System.out.println(con);
		
		
		
		/*
		 * FlatXmlDataSet用来获取基于属性存储的属性值
		 * 
		 */
		
		IDataSet ds=new FlatXmlDataSet(new FlatXmlProducer(new InputSource(TestDbunit.class.getClassLoader().getResourceAsStream("t_user.xml"))));
		
		System.out.println(ds);
		

		//clean_insert表示先把数据库里的所有数据都清空,然后在把t_user.xml的数据插入进去
		try
		{
			DatabaseOperation.CLEAN_INSERT.execute(con, ds);
		}
		catch (SQLException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}

这里执行了之后,便会将t_user里的数据按照格式加入到数据库中。






=========================================
这里说一下最常见的一些问题:

1.org.dbunit.dataset.NoSuchColumnException: T_USER.USERNAME -  (Non-uppercase input column: username) in ColumnNameToIndexes cache map. Note that the map's column names are NOT case sensitive.

这种问题属于xml文件里的数据和数据库里的格式不对应。
上面的t_user.username就是xml表里的username.
而数据库里的t_user表中的column名称是name.
dbunit在数据库表中找不到username,便报错了。



2. org.dbunit.dataset.NoSuchTableException: t_user
at org.dbunit.database.DatabaseDataSet.getTableMetaData(DatabaseDataSet.java:288)


数据库中没有该table。
dbunit是不会帮助我们建立表格的。(可以看到t_user.xml中只指定了数据库表名和列名,并没有详细的数据格式信息)

在使用dbunit进行测试之前必须手动在数据库中创建表格。或者使用hibernate来创建。



3. 一些乱七八糟的错误: 今天折腾了一下午的错误,就是因为dbunit的数据库的链接是通过我们自定义jdbc的getCon方法的连接。 和Hibernate Spring毫无任何关系。这点要注意。

4. 个人感觉这个东西不熟练的情况下最好不要和实际运行数据库一起使用。本人昨天就把数据库数据带xml的测试数据一起给弄没了。TT

dbunit入门 (一)基础实例

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
日期:2012-9-4 来源:GBin1.com 事件驱动的编程对于初学者来说可能有点儿困难,正是这个原因使得no
分享一个Python Tkinter基础控件用法的入门例子,包括窗口的显示、显示内置图片、弹出窗口、菜单等.
通过前面文章学习,已经对Blend的开发界面,以及控件有了初步的认识。本文将讲述Blend的一个核心功
通过前面文章学习,已经对Blend的开发界面,以及控件有了初步的认识。本文将讲述Blend的一个核心功
关于类、对象、实例的关系我总结为上面的图 class:类别,比如“人”这一类 object:通过实例弄出来
该实例主要是包含六部分:地图范围、坐标、动画效果、全屏、比例尺、进度条。 前期准备工作 前台代
一:订单商品数据模型 1.数据库执行脚本   创建数据库表代码: 1 CREATE TABLE items ( 2 id INT
一:订单商品数据模型 1.数据库执行脚本   创建数据库表代码: 1 CREATE TABLE items ( 2 id INT
前面了解了netty的基本用法与几个核心概念,从本文开始会通过一些实例(主要参考源码example包)来进
学习Lucene有两周时间,现就这两周的学习做一个简单小结,写了一个入门级别的实例,如下面所示; 小
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号