Unitils(DBUnit)预置数据无法插入CLOB类型的问题
2017-12-12 20:46
295 查看
unitils版本:2.4
jdbc版本:ojdbc6.11.2.0.3.0
![](http://img.blog.csdn.net/20171212203023544?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmFuc3Rf/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
.properties中并没有搜到类似配置。将jar包反编译后全局搜索,在 xxx 类中找到读取的配置项名字的具体逻辑,然后发现jar包带了默认配置文件(坑爹白找了半天,此处浪费15分钟)
解析此配置的代码以及配置项的key值:
![](http://img.blog.csdn.net/20171212204117723?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmFuc3Rf/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20171212204134753?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmFuc3Rf/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
在unitils的jar包中发现unitils-default.properties,里面有配置样例(自己工程的配置文件没有这部分…)
![](http://img.blog.csdn.net/20171212204315458?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmFuc3Rf/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20171212204325887?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmFuc3Rf/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20171212204504808?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmFuc3Rf/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20171212204514900?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmFuc3Rf/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
由此可见,使用OracleDataTypeFactory根据数据库表类型会创建OracleClobDataType,必然走到强制类型转换抛异常的代码。
而Oracle10DataTypeFactory将CLOB作为StringDataType处理,因此就绕开了强制转型的代码。
问题解决
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处理,因此就绕开了强制转型的代码。
问题解决
相关文章推荐
- 【已解决】oracle数据中,插入clob类型字段遇到的问题
- 关于oracle插入clob数据类型的问题
- vector中sort排序(解决char类型数据无法排序的问题)
- 使用java + oracle插入clob类型的数据
- 关于含有单双引号字符串类型的数据插入mysql遇到的问题
- sql 批量插入(一个数据库的表数据,添加到另一个数据库表) 数据类型nText和varchar在运算符equals不兼容的问题解决方案
- 在java + oracle环境下,对于clob类型的数据的插入
- [哭]使用Data Access 2 插入Ntext类型数据时SqlParameter不指定类型的问题 , ,请为我解惑
- 使用DOS命令无法插入中文数据到数据库的问题
- 数据类型转换不当导致数据库不能正确插入数据问题
- 使用java + oracle插入clob类型的数据
- 开发时遇到使用LINQ无法进行数据插入时的问题
- Java实体Date类型属性值无法保存到数据表对应字段的问题
- 使用java + oracle插入clob类型的数据
- 解决VS2013使用MySQL无法创建ADO.NET实体数据类型的问题
- 【郝斌数据结构自学笔记】16-23_链表的定义与分类_链表节点插入与删除_每一个链表节点的数据类型该如何表示的问题
- Java向MySQL数据库插入时间类型Date数据时需要注意的问题
- hibernate操作clob类型的数据问题
- 插入和读取blob和clob类型数据
- 无法在只读列“numindex”中插入数据--sql server 数据导入问题