dbunit支持多种格式导入导出

dbunit支持多种格式导入导出

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 >
< a ="1"  b ="1"  c ="1" />
< a ="2"  b ="2"  c ="2" />
</ dataset >

这个时候如果所有字段都不为空还好办。可以正常导入导出。但是当有一个字段为空的时候就不好办了。

为分两种情况:第一行数据某字段为空和非第一行数据某字段为空

当非第一行数据某字段为空时XML文件是这样的

<? xml version='1.0' encoding='UTF-8' ?>
< dataset >
< a ="1"  b ="1"  c ="1" />
< a ="2"  b ="2"   >
</ dataset >

表示第二行c字段为空。如果第一为空的时候XML文件变成这样

<? xml version='1.0' encoding='UTF-8' ?>
< dataset >
< a ="1"  b ="1"   />
< 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 >

现在就可以自由的导入导出了.

你可能感兴趣的:(dbunit支持多种格式导入导出)