【已解决】mysql+unitils用@DataSet,抛NoSuchColumnException
是unitils的一个bug。 使用mysql,用@DataSet注入测试数据时,会抛出org.dbunit.dataset.NoSuchColumnException。 起因是新版本的dbunit(目前是2.4.9)细化了各种数据库的MetadataHandler的处理,为每一种数据库提供了一个MetadataHandler,如MySqlMetadataHandler,Db2MetadataHandler等。而unitils并没有升级(快两年没更新了,还会更新吗?),仍然使用dbunit提供的DefaultMetadataHandler。这个DefaultMetadataHandler并不能很好的处理各个数据库之间的不同,所以会导致兼容问题。 有一种解决方案是将dbunit降级成2.4.2版本,虽然能解决这个问题,但是会引入新的问题。如果在数据XML文件中写入同一个表的两条数据,如: <?xml version='1.0' encoding='UTF-8'?> <dataset> <t_role id="1" name="test1" version="0" /> <t_role id="2" name="test2" version="0" /> </dataset> 则会抛出org.dbunit.database.AmbiguousTableNameException