您好,欢迎来到爱问旅游网。
搜索
您的当前位置:首页Unitils(DBUnit)预置数据无法插入CLOB类型的问题

Unitils(DBUnit)预置数据无法插入CLOB类型的问题

来源:爱问旅游网

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

本站由北京市万商天勤律师事务所王兴未律师提供法律服务