工作经验:mybatis 处理 oracle Long 类型

前言:mybatis 接收 oracle 中 LONG 类型的,报错:无效的列类型: getCLOB not implemented for class oracle.jdbc.driver.T4CLongAccessor

注意

  当表中有 long 类型的字段存在时,查询多条数据(列表)时能不查这个字段就不查这个字段。因为查了这个字段会影响速度。

情况

  oracle 表中有个字段为 LONG 类型,LONG 数据类型中存储的是可变长字符串,最大长度限制是2GB。(具体详解可以百度)

  由于数据库中的这张表是别的地方提供的,不能修改,只能查询,所以不能修改 oracle 表中这个字段的类型。

  所以只能处理当前问题。当前问题如下:java 实体使用 String 类型接ItemE,mybatis sql 中使用 resultMap 形式,sql resultMap 如下

<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.yule.demo">
        <result column="ITEM_E" property="itemE" jdbcType="LONGVARCHAR"/>
    </resultMap>

  然后查询 sql 报错:

解决方案

  将 sql 中的 LONGVARCHAR 改为 LONGVARBINARY 即可。

<result column="ITEM_E" property="itemE" jdbcType="LONGVARBINARY"/>

 

 补充(转http://blog.csdn.net/loongshawn/article/details/50496460

Mybatis JdbcType与Oracle、MySql数据类型对应列表

 

MybatisJdbcTypeOracleMySql
JdbcTypeARRAY  
JdbcTypeBIGINT BIGINT
JdbcTypeBINARY  
JdbcTypeBIT BIT
JdbcTypeBLOBBLOBBLOB
JdbcTypeBOOLEAN  
JdbcTypeCHARCHARCHAR
JdbcTypeCLOBCLOBTEXT
JdbcTypeCURSOR  
JdbcTypeDATEDATEDATE
JdbcTypeDECIMALDECIMALDECIMAL
JdbcTypeDOUBLENUMBERDOUBLE
JdbcTypeFLOATFLOATFLOAT
JdbcTypeINTEGERINTEGERINTEGER
JdbcTypeLONGVARBINARY  
JdbcTypeLONGVARCHARLONG VARCHAR 
JdbcTypeNCHARNCHAR 
JdbcTypeNCLOBNCLOB 
JdbcTypeNULL  
JdbcTypeNUMERICNUMERIC/NUMBERNUMERIC/
JdbcTypeNVARCHAR  
JdbcTypeOTHER  
JdbcTypeREALREALREAL
JdbcTypeSMALLINTSMALLINTSMALLINT
JdbcTypeSTRUCT  
JdbcTypeTIME TIME
JdbcTypeTIMESTAMPTIMESTAMPTIMESTAMP/DATETIME
JdbcTypeTINYINT TINYINT
JdbcTypeUNDEFINED  
JdbcTypeVARBINARY  
JdbcTypeVARCHARVARCHARVARCHAR

 


注意到, MyBatis的JdbcType中部分没有对应到Oracle和Mysql的数据类型中(或许由于自己遗漏),不过不用担心,后续大家碰到再具体分析;同时上述对应关系不一定是一一对应,请大家了解。

大家主要掌握基本的数字、时间、字符串就足以应对日常开发了。

 

  

转载于:https://www.cnblogs.com/yuxiaole/p/9267399.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值