DbUnit测试数据库非常方便,但我更常用的功能是它的数据库导入和导出。尤其在是做一个项目初始数据的时候。
但是一直有一个问题困扰着:
有一个表T,有字段A,B,C三列。
最常见的方式是用ANT来执行任务,将数据保存到xml文件。
<target name="export" depends="set.dataBase.mysql">
<dbunit driver="${dataBase.driver}" supportBatchStatement="true" url="${dataBase.url}/${dataBase.name}" userid="${dataBase.user}" password="${dataBase.user.password}" classpathref="classpath">
<operation type="INSERT" src="${data.dir}/a.xml" />
</dbunit>
</target>
a.xml文件格式如下:
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
<T a="1" b="1" c="1"/>
<T a="2" b="2" c="2"/>
</dataset>
这个时候如果所有字段都不为空还好办。可以正常导入导出。但是当有一个字段为空的时候就不好办了。
为分两种情况:第一行数据某字段为空和非第一行数据某字段为空
当非第一行数据某字段为空时XML文件是这样的
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
<T a="1" b="1" c="1"/>
<T a="2" b="2" >
</dataset>
表示第二行c字段为空。如果第一为空的时候XML文件变成这样
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
<T a="1" b="1" />
<T a="2" b="2" c="2"/>
</dataset>
可是导出到数据库这一列都为空。第二行以后的这一列的非空字段没有导入进去。
这个时候就不能使用这个文件格式,查看DBunit源才知道这个格式叫flat.
dbunit还支持其他几种格式数据:xml、dtd、csv、xls。这里的xml文件的格式是这样的:
<!DOCTYPE dataset SYSTEM "dataset.dtd">
<dataset>
<table name="TEST_TABLE">
<column>COL0</column>
<column>COL1</column>
<column>COL2</column>
<row>
<value>row 0 col 0</value>
<value>row 0 col 1</value>
<value>row 0 col 2</value>
</row>
<row>
<null/>
<value>row 1 col 1</value>
<null/>
</row>
</table>
<table name="SECOND_TABLE">
<column>COLUMN0</column>
<column>COLUMN1</column>
<row>
<value>row 0 col 0</value>
<value>row 0 col 1</value>
</row>
</table>
<table name='EMPTY_TABLE'>
<column>COLUMN0</column>
<column>COLUMN1</column>
</table>
</dataset>
这样就可以指定为空的字段了。
用起来也简单,就是加一个format参数。(才知道为什么老提示format 为空,因为默认的就是flat)
<target name="export" depends="set.dataBase.mysql">
<dbunit driver="${dataBase.driver}" supportBatchStatement="true" url="${dataBase.url}/${dataBase.name}" userid="${dataBase.user}" password="${dataBase.user.password}" classpathref="classpath">
<operation type="INSERT" src="${data.dir}/a.xml" format="xml"/>
</dbunit>
</target>
<target name="export" depends="set.dataBase.mysql">
<dbunit driver="${dataBase.driver}" supportBatchStatement="true" url="${dataBase.url}/${dataBase.name}" userid="${dataBase.user}" password="${dataBase.user.password}" classpathref="classpath">
<export dest="c:/a.xml" format="xml">
<table name="a" />
</export>
</dbunit>
</target>
现在就可以自由的导入导出了.
posted on 2008-12-09 21:10
Libo 阅读(2654)
评论(1) 编辑 收藏 所属分类:
数据库