`
hxy520882012
  • 浏览: 28803 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

iBatis操作CLOB类型字段时报setString can only process strings of less than 32766 chararacters

 
阅读更多

最近生产环境上因数据库某一字段类型由VARCHAR2(4000)改为CLOB后,报如下异常:

从异常信息观察,应该是com.ibatis.sqlmap.engine.type.StringTypeHandler.setParameterv即iBatis报出来的,通过代码跟踪,进入com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.class类中的update方法如下:

继续跟踪到com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.class类中,请看executeUpdate方法如下:

注意ParameterMap parameterMap = sql.getParameterMap(request, parameterObject);这句 ,继续跟踪,在com.ibatis.sqlmap.engine.mapping.sql.dynamic.DynamicSql.class中有如下方法,注意dynSql = new SimpleDynamicSql(this.delegate, dynSql).getSql(request, parameterObject);这句

继续跟踪到箭头所示getSql(request, parameterObject)就去里,找着如下代码:


这里应该是获取对应的类型转换器,继续跟踪到com.ibatis.sqlmap.engine.type.TypeHandlerFactory.class类中,发现该类创建了所有默认的类型转换器。

很明显,CLOB类型调了自定义类型转换器new CustomTypeHandler(new ClobTypeHandlerCallback())),于是继续跟踪到ClobTypeHandlerCallback.class里面,发现有如下代码:


看来该转换器是调用setCharacterStream以流的方式实现的,这样对于CLOB的处理应该是没有问题的,但实际项目为什么会报异常呢,经过摸索发现,可以按钮如下的sqlMap.xml中写,然后测试,问题解决,注意desc属性对应的写法DESC = #desc,handler=com.ibatis.sqlmap.engine.type.ClobTypeHandlerCallback#

对于insert同样的方法处理,我测试的项目中select语句没有报错,如报错select中比较直观,可以按如下方法


本人测试环境:

iBatis:ibatis-sqlmap-2.3.0

Spring:Spring-*-3.0.5.REALEASE

Oracle: oracle11g

Oracle驱动: ojdbc14






分享到:
评论

相关推荐

    ibatis 读取oracle clob类型

    ibatis 读取oracle clob类型

    ibatis oracle clob

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

    iBATIS操作Oracle CLOB数据

    iBATIS,作为一个轻量级的持久层框架,也支持对CLOB类型的字段进行操作。本文将深入探讨如何在iBATIS中有效地处理Oracle的CLOB数据。 首先,我们需要了解什么是CLOB。CLOB是一种用于存储大量字符数据的数据类型,它...

    mybatis 对clob类型转换

    在使用MyBatis框架进行数据操作时,我们可能会遇到CLOB类型数据的读写问题,尤其是在转换和插入数据库时。本篇将详细探讨MyBatis中处理CLOB类型数据的转换以及解决可能出现的异常情况。 首先,MyBatis是Java中的一...

    解决IBatis缓存动态字段问题

    ### 解决IBatis缓存动态字段问题 #### 背景与问题描述 在使用IBatis框架处理数据库操作时,可能会遇到动态数据表名、动态字段名的情况。这种情况下,由于IBatis的缓存机制,可能导致字段找不到的问题。具体表现为...

    ibatis 支持枚举类型

    Ibatis对枚举类型的原生支持可能不如实体类那样直观,但通过一些策略,我们可以实现枚举与数据库字段之间的映射。以下将详细解释如何在Ibatis中处理枚举类型。 首先,我们需要定义枚举类。枚举类通常包含若干枚举...

    ibatis基本操作数据库

    iBatis,全称为MyBatis iBatis,是一个基于Java的持久层框架,它简化了数据库与应用程序之间的交互,避免了直接编写大量的SQL语句和手动处理结果集。在这个过程中,iBatis提供了一个SQL映射框架,允许开发者将SQL...

    ibatis常用sql语句

    标题与描述概述的知识点主要集中在iBATIS框架的SQL映射技术上,特别是针对不同类型的输入参数如何在iBATIS中构建SQL语句。以下是对这些知识点的详细展开: ### iBATIS SQL映射技术概览 iBATIS是早期流行的Java持久...

    mybatis中操作json类型数据(csdn)————程序.pdf

    在MyBatis中,操作JSON类型数据涉及到对MySQL数据库中JSON字段类型的映射和转换,以便于在Java代码中能够方便地处理这些数据。这里,我们主要关注如何自定义TypeHandler来实现这一功能。 首先,MySQL引入了JSON类型...

    iBatis操作MySQL增删改查

    在IT领域,数据库管理和操作是不可或缺的部分,而iBatis作为一个优秀的持久层框架,与MySQL数据库结合使用,能实现高效且灵活的数据操作。本篇文章将深入探讨如何利用iBatis进行MySQL数据库的增删改查操作,同时提供...

    ibatis中输入输出各种类型的参数分析及#与$区别

    ### ibatis中输入输出各种类型的参数分析及#与$区别 #### iBatis简介与特点 iBatis作为一款轻量级的Java持久层框架,以其简洁、灵活的特点,在众多框架中占据一席之地。相较于知名的Hibernate框架,iBatis在实现上...

    ibatis自定义数据类型在不支持中文的数据库存储汉字

    在`iBatis`的映射文件中,我们需要为对应的Java字段指定这个自定义的TypeHandler,如下所示: ```xml ``` 这样,`iBatis`在插入或更新数据时,会使用我们的自定义TypeHandler进行编码和解码,从而在不支持...

    使用ibatis操作两个有关系的表

    在IT行业中,数据库操作是应用程序开发中的重要环节。Ibatis作为一个轻量级的持久层框架,为Java开发者提供了灵活的数据访问接口,使得SQL与Java代码分离,提高了开发效率。本案例将聚焦于如何使用Ibatis操作两个有...

    IBATISDAO库类操作

    **IBATISDAO库类操作详解** 在Java开发中,IBATIS是一个流行的数据访问接口框架,它提供了灵活的SQL映射机制,使得开发者能够直接使用SQL语句进行数据库操作,而无需编写复杂的JDBC代码。`IBATISDAO`库类是基于...

    IBatis常用操作封装

    总之,`IBatisDao.java`作为`IBatis`的封装,它将`IBatis`的常用操作进行抽象和集成,使得在实际项目中,开发者可以更专注于业务逻辑,而无需关心底层数据库操作的细节。通过对这个类的深入理解和使用,可以有效地...

    使用iBatis的类型处理器TypeHandlerCallback

    在处理数据库操作时,数据的类型转换是必不可少的步骤,因为Java类型和数据库存储的数据类型往往不完全匹配。`TypeHandler`接口和它的回调`TypeHandlerCallback`是解决这个问题的关键组件。 `TypeHandler`接口定义...

    ibatis持久层简单操作

    在IT行业中,持久层框架是数据库操作的重要工具,它简化了数据访问的复杂性,使得开发者可以更加专注于业务逻辑的实现。Ibatis作为一款轻量级的Java持久层框架,深受许多开发者的喜爱。本篇文章将详细介绍Ibatis的...

    ibatis类型

    标题 "ibatis类型" 暗示我们讨论的是关于iBATIS这个持久层框架的一些特定类型或组件。iBATIS是Java开发中的一个流行数据库访问框架,它允许开发者将SQL语句直接集成到XML配置文件中,实现了SQL与Java代码的分离,...

    使用ibatis操作大对象,mySQl数据库

    在MySQL数据库中,大对象通常存储在BLOB(Binary Large Object)或CLOB(Character Large Object)类型字段中。对于图片这类二进制数据,我们会选择BLOB类型。以下是一些关键知识点: 1. **配置iBatis**:在iBatis...

    ibatis总结 ibatis ibatis ibatis ibatis

    Ibatis 是一款轻量级的Java持久层框架,它允许开发者将SQL语句与Java代码分离,从而使得数据库访问更加灵活、易于维护。本篇文章将深入探讨Ibatis的核心概念、最佳实践以及与其他框架如Struts和Spring的整合。 1. ...

Global site tag (gtag.js) - Google Analytics