版权申明
本站资料文章其版权归作者本人所有。
如果有任何侵犯您版权的地方,请尽快与本站联系!
DbUnit与POI版本不兼容问题解决
发表日期: 2015-5-20 14:24:02 阅读次数: 647 
DbUnit是一款数据库单元测试工具,POI是应用导出导入excel所需的jar包。为了做好单元测试的数据准备,实现excel准备数据,并且实现与数据库之间的交互,DbUnit跟POI就结合在了一起。
    在使用的过程中发现最新版本的DbUnit跟POI是不兼容的,这个问题的结觉网上也没有什么好的办法,这个问题的产生是因为DbUnit不更新引起的(最新版的DbUnit是2008年的),而POI是不断更新的(最新版是2014年发布的3.11)。那么不兼容问题怎么解决呢?
    您可以将DbUnit的源码增加到您的工程中(如下图),自己编译,你会神奇的发现,POI跟DbUnit的兼容性问题,解决了。源码您可以在DbUnit的官网(http://www.dbunit.org/)下载,我实验了很多次,官网登陆不了。只能是在http://download.csdn.net/download/owen0278/5638729下载了DbUnit2.4.9的源码。

     在使用过程中,接下来你可能又会发现这个兼容性问题并没有完全解决,只是解决了excel2003及以前的版本(扩展名是.xls)的问题,excel2007以后的版本(扩展名是.xlsx)的兼容性根本没解决,原因很简答,DbUnit根本不支持.xlsx的文件,那这是为什么呢?
    先来看下POI的结构:HSSF - 提供读写Microsoft Excel XLS格式档案的功能;XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能。也就是说POI是完全支持excel的全部版本的,那么DbUnit呢?如下面两个图可以看到最新版本的DbUnit里对excel的处理全部是基于hssf的,很显然他是不支持.xlsx文件的。找到了问题的根源,这件事情处理起来也比较容易了,那该怎么办呢?

    我在这里采用的方法是,仿照现在DbUnit对.xls文件的处理,编写可以处理.xlsx文件的类,如下图所示:

     问题来了,处理.xlsx的文件应该如何编写呢?这里写起来也很简单,只要是将处理.xls文件里的hssf相关类修改为xssf的相关类就可以了,如下图是对修改前及修改后的其中的一个类做的一个对比,相信通过对比,你也就清楚了。

     通过以上的操作,修改后的DbUnit源码跟最新版本的的POI的兼容性问题也就解决了。这些是最近在搞mysql数据库数据准备的时候克服的一个工作难点,希望对大家有所帮助。