读了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,作为一个轻量级的持久层框架,它为Java应用程序提供了数据库操作的支持,尤其在处理SQL映射...
iBATIS-SqlMaps-2-快速入门教程 iBATIS-SqlMaps-2 是一个 Java 持久层框架,用于简化 Java 应用程序中的数据库交互。快速入门教程旨在帮助开发者快速了解 iBATIS-SqlMaps-2 的使用和配置。 知识点1:iBATIS-Sql...
iBATIS-SqlMaps-2_cn中文文档
《iBATIS-SqlMaps-2-Tutorial_cn》是一本针对初学者的优秀教程,它深入浅出地介绍了iBATIS这一流行的数据访问框架。iBATIS,作为Java世界中的一个轻量级持久层框架,它提供了一种将SQL查询与Java代码解耦合的方法,...
Ibatis基本配置---[环境搭建
教程《iBATIS-SqlMaps-2 Tutorial_ja.pdf》可能包含以下内容:基础安装和配置、SqlMap配置详解、数据源的设置、SQL映射文件的编写、动态SQL的使用、事务管理、结果集映射、参数映射、自定义类型处理器、异常处理以及...
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_cn.pdf》是关于iBATIS SQL Maps的中文版文档,它详尽地阐述了如何使用SQL Maps来构建数据库驱动的Java应用。iBATIS是一个开源的Java库,它的核心功能是简化Java应用程序与数据库之间的交互,尤其...
这个PDF文档资料集全面介绍了如何使用iBATIS-SqlMaps-2进行数据库交互,尤其适合对Java开发和数据库操作感兴趣的初学者以及希望提升数据库访问效率的开发者。 首先,iBATIS的核心概念是SqlMap,它是一个XML配置文件...
iBATIS-SqlMaps ibatis入门教程,教你如何做配置ibatis
### iBATIS-SqlMaps-2_ja.pdf 相关知识点 #### iBATIS Data Mapper 概览 iBATIS Data Mapper(也称为 SQL Maps)是一个开源框架,它旨在简化与关系数据库交互所需的 Java 代码量。通过使用简单的 XML 配置文件,...
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
通过学习这个压缩包的内容,开发者可以掌握如何在Java项目中集成和使用iBATIS-SqlMaps-2,从而提高数据库操作的效率和灵活性。此外,了解iBATIS的高级特性如结果映射、缓存机制和动态SQL,可以帮助开发者编写出更加...
《iBATIS-SqlMaps-开发指南》是针对iBATIS框架的重要参考资料,分为version 1.0和version 2两个版本。iBATIS是一个Java编程语言中的持久层框架,它允许开发者将SQL语句与Java代码分离,提高了数据访问的灵活性和效率...
综上所述,通过iBATIS操作Oracle的CLOB数据,需要对iBATIS的映射文件、类型处理器以及Oracle的CLOB特性有深入理解。在实际开发中,合理配置和使用这些机制,能够有效地管理大量文本数据,同时保持代码的简洁性和可...
标题 "ibatis oracle clob" 涉及到的是在Java开发中,使用iBATIS框架与Oracle数据库交互时处理CLOB(Character Large Object)类型数据的问题。CLOB是Oracle数据库用于存储大文本数据(如XML文档、长篇文章等)的...
《iBATIS-SqlMaps-中文教程》是一个深入解析iBATIS框架的资源,适合对Java Web开发感兴趣的初学者和进阶者。iBATIS是一个持久层框架,它允许开发者将SQL语句直接写在XML配置文件中,实现了SQL与Java代码的分离,简化...