在使用dbunit导出数据到Excel中时遇到的问题

因为工作需要去学习了dbunit的使用,当然看到网上很多例子都是使用FlatXmlDataSet这种类型区读写xml文件,而在同时都提到了XlsDataSet这种类型也是常用的数据格式,但却没有一个例子,于是自己就按照导出xml的方法去写一个导出xls文件的小Test,其实就是换了一种方法,用XlsDataSet.write(dataSet,out)的方法去将数据写入到Excel中的xls文件。

这里先给出我参照的例子,只是用普通的java工程,单纯的只是用dbunit中的方法,读取数据库。

import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;

import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.database.QueryDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;

public class TestApp {
    public static void main(String[] args) throws Exception{ 
        Class.forName("com.mysql.jdbc.Driver");  
        Connection conn = DriverManager.getConnection(  
                "jdbc:mysql://localhost/sample", "root", "root");
        IDatabaseConnection connection = new DatabaseConnection(conn); 
        
        QueryDataSet dataSet = new QueryDataSet(connection);  
        //将整个person表里的数据导出到 xml文件里  
        dataSet.addTable("testa");  
        //将users表里符合条件的数据导出到xml文件里  
        dataSet.addTable("users","select * from users where id < 4");  
        //导出到dbunit.xml文件里  
        FlatXmlDataSet.write(dataSet,new FileOutputStream("dbunit.xml"));
    }
}

我用到的包有commons-logging-1.1.1.jar,dbunit-2.4.9.jar,mysql-connector-java-5.1.12-bin.jar,slf4j-api-1.7.2.jar,slf4j-log4j12-1.7.2.jar,junit-3.8.1.jar,可以成功在项目的根目录下生成dbunit.xml文件,文件内容包括testa表和users表两个表的内容。

然后我就直接把FlatXmlDataSet.write(dataSet,out)方法给换成了XlsDataSet.write(dataSet,out);代码如下

import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;

import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.database.QueryDataSet;
import org.dbunit.dataset.excel.XlsDataSet;

public class TestExcel {
    private final static String FILENAME ="d://xxm//excel.xls";

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        //Connection conn = DBUtil.getConnection();
        Class.forName("com.mysql.jdbc.Driver");  
        Connection conn = DriverManager.getConnection(  
                "jdbc:mysql://localhost/sample", "root", "root");
        IDatabaseConnection connection = new DatabaseConnection(conn);
        QueryDataSet dataSet = new QueryDataSet(connection);
        //将整个person表里的数据导出到 xml文件里  
        dataSet.addTable("testa");  
        //将users表里符合条件的数据导出到xml文件里  
        dataSet.addTable("users","select * from users where id < 4");  
        //导出到Excel文件里  
        /*注意这里导入了poi-3.2-FINAL.jar,在这里我用的dbunit-2.4.9.jar
         * 是最新的版本,而poi目前最新的版本是poi-3.10-beta2-20130904.jar,
         * 与dbunit的最新版本一起使用会报错 会出现:
         * java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFCell.setCellValue(Lorg/apache/poi/hssf/usermodel/HSSFRichTextString;)V
         * 而换成poi-3.2-FINAL.jar时则成功导出,生成了两个Sheet,Sheet名为表名
         * 即只能导出一个表中的数据,并且只能导出Excel97-2003*.xls版本的文件
         * 而使用FlatXmlDataSet能够导出多个表中的数据
        */
         XlsDataSet.write(dataSet, new FileOutputStream(FILENAME));
    }
}

问题出现了,开始报错 java.lang.NoClassDefFoundError: org/apache/poi/hssf/usermodel/HSSFWorkbook,上网查询后知道少了一个jar包

poi.jar于是我去官网上去下载了一个最新的版本poi-3.10-beta2-20130904.jar,于是问题又出现了还是报错错误信息变成了java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFCell.setCellValue(Lorg/apache/poi/hssf/usermodel/HSSFRichTextString;)V

查了很多资料都显示可能是poi.jar的版本问题,心想我都是最高版本了,应该是版本高了,但究竟用哪个版本能解决问题呢,最终查到一个用日文记录的日志,说是将版本poi.jar的版本换到poi-3.2-FINAL.jar,照做后问题解决。最终生成了excel.xls文件这里只能是Excel97-2003版本的,文件中包含两个Sheet,Sheet名为表名,每个Sheet中第一行为字段名,第二行开始是相对应的数据。同理在读取Excel文件时应该只支持Excel97-2003这个版本的吧。

最后总结一下用到的包

commons-logging-1.1.1.jar

dbunit-2.4.9.jar

junit-3.8.1.jar

log4j-1.2.17.jar

mysql-connector-java-5.1.12-bin.jar

poi-3.2-FINAL.jar  

slf4j-api-1.7.2.jar

slf4j-log4j12-1.7.2.jar

 

 


 

posted @ 2013-10-18 14:53  xm3530  阅读(1658)  评论(0编辑  收藏  举报