unitils版本:2.4
jdbc版本:ojdbc6.11.2.0.3.0
通过@DataSet注解预置数据库数据时,其中一列为CLOB类型,执行用例报如下错误:
这个Unitils我是头一次用,补充项目UT刚好碰上了这个问题,懒得细细看代码,以下为(撞大运)解决过程。
并没有什么头绪,debug进来看代码确实要报此异常,因为在CLOB.java中会将外部传入的Connection对象强转为oracle.jdbc.OracleConnection。
初步使用“dbunit clob”作为关键字google下,发现靠谱的回答集中在配置DataTypeFactory上,但是又没人写出具体如何配置,项目工程中已有的unitils
.properties中并没有搜到类似配置。将jar包反编译后全局搜索,在 xxx 类中找到读取的配置项名字的具体逻辑,然后发现jar包带了默认配置文件(坑爹白找了半天,此处浪费15分钟)
解析此配置的代码以及配置项的key值:
在unitils的jar包中发现unitils-default.properties,里面有配置样例(自己工程的配置文件没有这部分…)
将上面部分拷到自己的配置文件中,并没有什么鸟用…再次debug代码发现默认走的和配置后的获取到的都是OracleDataTypeFactory,一样的,两个配置文件是相互覆盖的关系,拷过来跟没改一样。
google有人说应该使用Oracle10DataTypeFactory,修改后果然成功了。比较二者对于CLOB的区别如下:
由此可见,使用OracleDataTypeFactory根据数据库表类型会创建OracleClobDataType,必然走到强制类型转换抛异常的代码。
而Oracle10DataTypeFactory将CLOB作为StringDataType处理,因此就绕开了强制转型的代码。
问题解决
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务