`
jhyimu2005
  • 浏览: 185789 次
  • 性别: Icon_minigender_2
  • 来自: 苏州
社区版块
存档分类
最新评论

ibatis中接受Clob类型的数据( Cause: java.sql.SQLException: ORA-22835: Buffer too small f)

阅读更多

此前在使用中将CLOB类型的数据转化为可用String类型接受的属性的方法是to_char(......),但在其使用中发现,当其长度超过4000时就会抛出异常( Cause: java.sql.SQLException: ORA-22835: Buffer too small for CLOB to CHAR or BLOB to RAW conversion)

其实本身这么转换就存在问题,因为CLOB的长度最大可为4G,如此转换肯定会存在问题,以下是正确的转换方式:

在相应的informationRelease.xml文件如此表示

<resultMap id="getInformationByIdResultMap" class="com.foundersc.crmweb.entity.information.InformationTo">
		<result property="id" column="id"/>
		<result property="title" column="title"/>
		<result property="mediaSource" column="mediaSource"/>
		<result property="publishDate" column="publishDate"/>
		<result property="publishUserName" column="publishUserName"/>
		<result property="createDt" column="createDt"/>
		<result property="keyword" column="keyword"/>
		<result property="cascadeType" column="cascadeType"/>
		<result property="industrySort" column="industrySort"/>
		<result property="relationCode" column="relationCode"/>
		<result property="isRelease" column="isRelease"/>
		<result property="publishUserId" column="publishUserId"/>
		<result property="sendGroupType" column="sendGroupType"/>
		<result property="readedCount" column="readedCount"/>
		<result property="message" column="message"/>
		<result property="content" column="content" jdbcType="CLOB" javaType = "java.lang.String" typeHandler="com.foundersc.crmweb.util.OracleClobTypeHandlerCallback"/>
	</resultMap>
<select id="information.getInformationById" resultMap="getInformationByIdResultMap" parameterClass="java.lang.String">
		SELECT distinct info.information_id As id,
			   info.title AS title,
			   info.media_source   AS mediaSource,
			   info.publish_date   AS publishDate,
			   userT.userName   AS publishUserName,
			   info.create_dt   AS createDt,
		       infoContent.content  AS content,
		       info.keyword   AS keyword,
		       info.cascade_type   AS cascadeType,
		       info.industry_sort   AS industrySort,
		       info.relation_code   AS relationCode,
		       info.is_release   AS isRelease,
		       info.publish_userId AS publishUserId,
		       info.send_group_type AS sendGroupType,
		       info.readed_count AS readedCount,
		       info.message AS message
		FROM   crm.crm_t_information info
		left join crm.crm_t_information_content infoContent on infoContent.information_id = info.information_id
		left join kf.au_t_user userT on userT.user_id = info.create_by
		WHERE  info.information_id = #informationId#
	</select>

 

 其中红色字体标示的地方才是咱们真正关心的,其中typeHandler的值即为咱们写的转换CLOB类型为String类型的java代码的路径,其java代码如下:

package com.foundersc.crmweb.util;

import java.sql.SQLException;

import oracle.sql.CLOB;

import com.ibatis.sqlmap.client.extensions.ParameterSetter;
import com.ibatis.sqlmap.client.extensions.ResultGetter;
import com.ibatis.sqlmap.client.extensions.TypeHandlerCallback;

public class OracleClobTypeHandlerCallback implements TypeHandlerCallback {

	//获取时将CLOB类型的值转换为我们需要的,此处转换为了Object
	public Object getResult(ResultGetter getter) throws SQLException {
		CLOB clob = (CLOB) getter.getClob();  
        return (clob == null || clob.length() == 0 )? "" :clob.getSubString((long)1, (int)clob.length());  
	}

	//用CLOB类型的变量接受从数据库中读取的值
	@SuppressWarnings("deprecation")
	public void setParameter(ParameterSetter setter, Object obj)
			throws SQLException {
		  CLOB clob = CLOB.empty_lob();  
	      clob.setString(1, (String)obj);  
		  setter.setClob(clob);    

	}

	public Object valueOf(String arg0) {
		// TODO Auto-generated method stub
		return null;
	}

}

 

备注:在查询的sql语句中不能含有distinct,至于原因我也不太清楚。

分享到:
评论

相关推荐

    Caused by: java.net.UnknownHostException: openapi.alipay.com

    Caused by: java.net.UnknownHostException: openapi.alipay.com

    sql-map-2.dtd和sql-map-config-2.dtd

    在IT行业中,数据库操作是核心任务之一,而Ibatis作为一款优秀的Java持久层框架,极大地简化了数据库操作。本文将深入探讨与“sql-map-2.dtd”和“sql-map-config-2.dtd”相关的知识点,以及它们在Ibatis中的作用。 ...

    ibatis-2.3.4.726.jar,ibatis-2.3.0.677.jar,ibatis-2.3.3.720.jar下载

    iBATIS,全称为“Infrastructure for Binding Applications To SQL Maps”,是一个优秀的开源持久层框架,它允许Java开发者将SQL语句与Java代码分离,提供了一种简单但强大的在Java应用中映射SQL和结果集的方式。...

    Mybatis报错: org.apache.ibatis.exceptions.PersistenceException解决办法

    在使用Mybatis框架时,你可能会遇到`org.apache.ibatis.exceptions.PersistenceException`这样的异常。这个异常通常表示在执行数据库查询操作时遇到了问题。本篇将详细分析这个问题并提供解决方法。 ### 问题概述 ...

    使用的ognl的chm

    在Java开发中,尤其是Web应用框架如Struts2和Hibernate中,OGNL被广泛使用。它允许开发者以简洁的方式访问和操作对象的属性,甚至包括深层次的对象图导航。 **OGNL的基础概念:** 1. **表达式**:OGNL的核心是其...

    mybatis 对clob类型转换

    在处理CLOB类型时,MyBatis需要将Java对象中的String或Reader类型数据转换为CLOB,以便存储到数据库中。 1. **CLOB类型数据的插入** 当你需要将一个字符串或者Reader对象插入到CLOB字段时,MyBatis默认可能无法...

    ibatis 读取oracle clob类型

    ibatis 读取oracle clob类型

    iBATIS操作Oracle CLOB数据

    CLOB是一种用于存储大量字符数据的数据类型,它可以容纳最大4GB的单个文本对象。在Oracle中,CLOB通常用于存储大段的文本,如文章、报告或者XML文档。 iBATIS是一个Java库,它允许开发者将SQL语句与Java代码分离,...

    asm5.0.jar

    nested exception is org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.lang.IllegalStateException: Cannot enable lazy loading because CGLIB is not ...

    iBATIS内置别名列表

    数据类型别名主要用于映射SQL查询结果到Java对象时的数据类型转换。了解这些别名有助于开发者在编写SQL映射文件时更方便地指定数据类型。 1. **string**:`java.lang.String` 2. **byte**:`java.lang.Byte` 3. **...

    ibatis oracle clob

    标题 "ibatis oracle clob" 涉及到的是在Java开发中,使用iBATIS框架与Oracle数据库交互时处理CLOB(Character Large Object)类型数据的问题。CLOB是Oracle数据库用于存储大文本数据(如XML文档、长篇文章等)的...

    sql-map-2.dtd

    ibatis的dtd约束,版本2,xml文件中标签提示,网址:http://ibatis.apache.org/dtd/sql-map-2.dtd

    IBatis.DataMapper.1.6.2.bin.zip

    IBatis 是由 Clinton Begin 创建的一款优秀的数据库操作框架,它将SQL语句与Java代码分离,提供了灵活的映射机制,使得开发者可以更专注于业务逻辑的实现。DataMapper是IBatis的核心组件,负责处理数据访问层的映射...

    IBATISJDBC包

    1. **IBATIS核心库**: 包含了ibatis-2.x.jar,这是IBATIS框架的主要实现,提供了SQL映射文件解析、事务管理、结果集处理等功能。 2. **JDBC驱动**: 根据实际使用的数据库类型,如MySQL、Oracle、SQL Server等,需要...

    Manning.iBATIS.in.Action.Jan.2007.eBook-BBL.pdf

    iBATIS是一个用于Java的应用程序框架,其核心思想是简化Java持久层编程,并提供一种灵活的方式来处理SQL查询和结果集映射。iBATIS的设计理念强调了开发人员应该能够直接控制SQL语句的编写,这使得iBATIS非常适合那些...

    iBATIS-SqlMaps-2_cn.rar

    通过学习这个压缩包的内容,开发者可以掌握如何在Java项目中集成和使用iBATIS-SqlMaps-2,从而提高数据库操作的效率和灵活性。此外,了解iBATIS的高级特性如结果映射、缓存机制和动态SQL,可以帮助开发者编写出更加...

    javasqlTypes数据库字段类型java数据类型的对应关系

    在Java编程语言中,与数据库交互是常见的任务,这就涉及到`java.sql.Types`枚举类,它是Java数据类型与数据库字段类型之间的桥梁。`java.sql.Types`定义了一系列常量,这些常量代表了SQL标准中的数据类型,使得我们...

    iBATIS-SqlMaps-2_cn.pdf

    在XML描述文件中,SQL Maps定义了Java Bean、Map实现以及基本数据类型的包装类如何与数据库中的表和记录对应。这些映射文件通常包含SQL查询、存储过程以及事务管理等元素,使得开发者无需编写大量JDBC代码就能完成...

    iBATIS-SqlMaps-2-Tutorial_cn.pdf

    iBATIS-SqlMaps-2-Tutorial_cniBATIS-SqlMaps-2-Tutorial_cn.pdf.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdf

Global site tag (gtag.js) - Google Analytics