关于mybatis3.0处理long字段的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于mybatis3.0处理long字段的问题相关的知识,希望对你有一定的参考价值。

我现在用的是oracle 10g,架构spring+mybatis3,jdbc包用的是oracle安装路径里面的ojdbc14,表中有一个字段是long类型的,生成xml文件里面,我如果这样写
<result column="O_DATA_FRAMES" property="oDataFrames" jdbcType="[color=#FF0000]LONGVARCHAR[/color]" />
或者
<result column="O_DATA_FRAMES" property="oDataFrames" jdbcType="[color=#FF0000]CLOB[/color]" />
在查询的时候都报错:Caused by: java.sql.SQLException: 无效的列类型: getCLOB not implemented for class oracle.jdbc.driver.T4CLongAccessor

如果这样写:<result column="O_DATA_FRAMES" property="oDataFrames" jdbcType="[color=#FF0000]BLOB[/color]" />
在查询的时候就报错Caused by: java.sql.SQLException: 流已被关闭
请问是咋回事啊?

参考技术A jdbcType=INTEGER试试

mybatis + oracle insert clob,出现ORA-01461:仅能绑定要插入LONG列的LONG值

在网上查了很久,有可能问题是出现在当从dual中取数据时,会将clob对象的字段转为Long型

最后的解决方法用到了Begin和end语法:

1.用到begin 和end

2.用到insert into value()语法

不能用insert into select from dual (union all)语法

3.参数,指定 jdbcType=CLOB 类型

 <insert id="batchInsert" parameterType="java.util.List">
    begin
    <foreach collection="list" item="item" index="index" separator=";">
       insert into tableName(ID, content) 
       values( #{item.id},#{item.content,jdbcType=CLOB})
    </foreach> 
    ;end;
  </insert>

 

以上是关于关于mybatis3.0处理long字段的问题的主要内容,如果未能解决你的问题,请参考以下文章

mybatis 处理长字段(long varchar)

关于金额,重量等浮点数的数据库字段设计(用Int,Long代替浮点数计算)

关于字段超长导致的插入错误的提示信息(value too long for type character varying)

关于Long转String和js丢失精度截断的问题

oracle long类型处理

如何通过c#读取oracle数据库中的long类型字段