欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

dbunit入门 (1)基础实例

更新时间: 2014-01-05 02:04:51 责任编辑: Author_N1

 

dbunit入门 (一)基础实例
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
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:04:51
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/5362/
本文WWW.DOC100.NET DOC100.NET版权所有。