读了Klyuan的"Ibatis读写CLOB数据", 感觉受益良多。其中涵盖了利用ibatis插入数据库BLOB/CLOB数据的四种方法. 其中尤属采用10g的驱动,和通过配置parameterMap和resultMap的方法最为简单,且没有局限性.可视为一个完美的解决方案.
四种方法中我尝试了除jdbc以外的三种方法, 在一开始都没有成功.最后发觉是oracle的驱动的问题. 原来用的是classes12.jar. 当使用最后一种采用oracle10g驱动的方法时, 他会报" java.sql.SQLException:数据大小超出此类型的最大值: 105542". 而当通过实现ibatis的回调接口来实现时,它会报oracle错误"ORA-24813: 不能发送或接收不受支持的 LOB" . 以下是我写的一个OracleBlobTypeHandlerCallback. 在原文中只有OracleClobTypeHandlerCallback.
java 代码
- package com.hank.utill;
-
- import oracle.sql.BLOB;
- import java.sql.CallableStatement;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
-
- import com.ibatis.sqlmap.client.extensions.ParameterSetter;
- import com.ibatis.sqlmap.client.extensions.ResultGetter;
- import com.ibatis.sqlmap.client.extensions.TypeHandlerCallback;
-
-
-
-
-
-
-
- public class OracleBlobTypeHandlerCallback implements TypeHandlerCallback {
-
- public Object getResult(ResultGetter getter) throws SQLException {
- BLOB blob = (BLOB) getter.getBlob();
-
- return (blob == null || blob.length() == 0 )? null :blob.getBytes(0L, (int)blob.length());
- }
-
- public void setParameter(ParameterSetter setter, Object obj) throws SQLException {
- BLOB blob = BLOB.empty_lob();
- blob.setBytes((byte[])obj);
- setter.setBlob(blob);
- }
-
- public Object valueOf(String arg0) {
-
- return null;
- }
-
- }
在换成ojdbc14.jar驱动后,问题解决了. 呵呵!
在我sql文件中并没有使用parameterMap, 这是因为当我指定blob字段的javaType为"[]byte"时, 在tomcat服务器启动时会报错: java.lang.ClassNotFoundException: []byte. 目前问题仍未解决.....
另外我对原文中对前三种方法的分析有些还不是很明白.
--引用原文
上面三种方法都存在的问题:
1. 使用jdbc来实现,就失去了使用ibatis带来的便利,同时也失去了自动事务管理的能力,还有需要自己去手工管理连接对象。代码量也相当复杂。
2. 使用spring提供的处理器,不支持采用数据连接池的数据源,有很大的局限性。
3. 通过实现ibatis的回调接口来实现,也有一定的局限性,需要新增一个类,配置也不方便,还可能会出错。
--
对于第二点中提到的spring提供的处理器不支持数据连接池的数据源, 还有第三点提到的局限性还有待以后好好领悟.
分享到:
相关推荐
iBATIS-SqlMaps-2-Tutorial_cniBATIS-SqlMaps-2-Tutorial_cn.pdf.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdf
iBATIS-SqlMaps-2_cn中文文档
Ibatis基本配置---[环境搭建
ibatis-SqlMaps-开发指南-version 1.0; ibatis-SqlMaps-开发指南-version 2
apache开源项目源码ibatis-3-core-src-3.0.0.227 ibatis框架java源程序 spring,struts,hibernate,ibatis,框架源码 各种ibatis框架应用源码,你会从中得到意想不到的效果! apache开源组织开发的开源项目源码,其...
ibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zip
iBATIS-SqlMaps-2_ja说明资料
iBATIS-SqlMaps ibatis入门教程,教你如何做配置ibatis
ibatis-3-core-3.0.0.242.zip ibatis-3-core-3.0.0.242.zip ibatis-3-core-3.0.0.242.zip ibatis-3-core-3.0.0.242.zip
ibatis-3-core-3.0.0.200
ibatis 入门很不错的书! 大力推荐
快速进入IBATIS的好教材,本教材是IBATIS中文版,非常的适合IBATIS初学者来学习,对经验者也是一本非常好的参考资料。
ibatis-sqlmap ibatis-sqlmap-2 ibatis-sqlmap-2.jar.zip
10_ibatis教程_ibatis-2.3.3.720.zip 10_ibatis教程_ibatis-2.3.3.720.zip
ibatis2-dao-2.1.6.589.jar文件,ibatis实现控制层
iBATIS-SqlMaps-2-Tutorial_en.rar
iBATIS-SqlMaps-2_en
SQL Map提供了一个简洁的框架,使用简单的XML描述文件将Java Bean,Map实现和基本数据类型的包装类
iBATIS-SqlMaps-2_cn中文iBATIS资料
java iBATIS-SqlMaps-2-快速入门教程