我现在用的是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: 流已被关闭
请问是咋回事啊?
在网上查了很久,有可能问题是出现在当从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>