mybatis查询oracle long类型的踩坑记录

 更新时间:2023年03月30日 10:13:56   作者:zhg520zhg  
这篇文章主要介绍了mybatis查询oracle long类型的踩坑记录,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

mybatis查询oracle long类型的坑

问题描述

最近在开发中,遇到查询oracle long类型异常的问题,需求是查询一个字段中含有函数的索引的内容,然后通过mybatis获取返回的内容封装成对象,其中long类型在对象中用String接收,COLUMN_EXPRESSION字段为long类型,供后续业务使用,自定义查询语句如下

select a.COLUMN_EXPRESSION, a.COLUMN_POSITION from USER_IND_EXPRESSIONS a
inner join USER_IND_COLUMNS b on b.INDEX_NAME = a.INDEX_NAME
and b.TABLE_NAME = a.TABLE_NAME and b.COLUMN_POSITION = a.COLUMN_POSITION
where b.COLUMN_NAME like 'SYS_NC%$'

报错:Cause: java.sql.SQLException: 流已被关闭 ; uncategorized SQLException for SQL []; SQL state [99999]; error code [17027]; 流已被关闭

解决办法

如果可以修改字段类型情况下,建议改成BLOB,CLOB,NLOB,非常不建议使用LONG;

在无法修改字段类型情况下,一定要将LONG类型字段放在查询字段的最后(COLUMN_EXPRESSION放在最后),例如

select a.COLUMN_POSITION, a.COLUMN_EXPRESSION from USER_IND_EXPRESSIONS a
inner join USER_IND_COLUMNS b on b.INDEX_NAME = a.INDEX_NAME
and b.TABLE_NAME = a.TABLE_NAME and b.COLUMN_POSITION = a.COLUMN_POSITION
where b.COLUMN_NAME like 'SYS_NC%$'

收获: 

Oracle中如果是数值,用NUMBER替换LONG,如果是大对象可以用BLOB,CLOB,NLOB替换LONG;其实查询时还可以通过存储过程将LONG转成VARCHAR2返回,个人不建议使用存储过程。

mybatis处理Oracle中的LONG字段

当使用mybatis查询oracle中带有LONG数据类型的时候,实体类使用的是String类型来接收.

一般会报两种错误:

  • 1.无效字段类型  
  • 2.流已被关闭

处理方法

第一种方式:不使用LONG类型(废话)

第二种方式:自定义函数将LONG类型转换为VARCHAR类型(百度,方法一大堆,都是)

第三种方式:首先在Mapper.xml文件中自定义resultMap映射关系,将LONG类型字段的jdbcType设置为LONGVARBINARY

<resultMap id="BaseResultMap" type="com.libstar.tc.dto.Biblios" >
    <result column="name" property="bookrecno" jdbcType="VARCHAR" />
    <result column="content" property="content" jdbcType="LONGVARBINARY" />
</resultMap>

然后自定义SQL查询数据,在写SQL的时候要注意了,将LONG类型的那个字段写在最后,像这样

SELECT ID,NAME,CONTENT FROM XXX;其中CONTENT字段为LONG类型字段.

即可成功~

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Mybatis开发环境搭建实现数据的增删改查功能

    Mybatis开发环境搭建实现数据的增删改查功能

    这篇文章主要介绍了 Mybatis开发环境搭建实现数据的增删改查功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-03-03
  • MyBatis映射关系详解

    MyBatis映射关系详解

    本文重点介绍MyBatis映射关系重点是映射关系一对一,一对一映射方式结合应用实例给大家详细讲解,对MyBatis映射关系相关知识感兴趣的朋友一起看看吧
    2022-11-11
  • SpringBoot中的main方法注入service

    SpringBoot中的main方法注入service

    这篇文章主要介绍了SpringBoot中的main方法注入service操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 启动 Eclipse 弹出 Failed to load the JNI shared library jvm.dll 错误的解决方法

    启动 Eclipse 弹出 Failed to load the JNI shared library jvm.dll

    这篇文章主要介绍了有时候,新电脑上回碰到打开Eclipse时,弹出提示“Failed to load the JNI shared library jvm.dll”错误,这里给大家分享解决方案
    2016-08-08
  • Java 常量与变量的区别详细介绍

    Java 常量与变量的区别详细介绍

    这篇文章主要介绍了Java 常量与变量的区别的相关资料,并附实例代码帮助大家学习理解,需要的朋友可以参考下
    2016-10-10
  • 浅谈Java后台对JSON格式的处理操作

    浅谈Java后台对JSON格式的处理操作

    下面小编就为大家带来一篇浅谈Java后台对JSON格式的处理操作。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • Java实现修改PDF文件MD5值且保持内容不变

    Java实现修改PDF文件MD5值且保持内容不变

    在某些场景中,我们可能需要改变PDF文件的MD5值,而又不希望改变文件的可视内容,本文详细介绍了如何实现这一目标,并提供了具体的Java实现示例,需要的可以参考下
    2023-10-10
  • 关于@Component注解下的类无法@Autowired问题

    关于@Component注解下的类无法@Autowired问题

    这篇文章主要介绍了关于@Component注解下的类无法@Autowired问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • springboot 中文件上传下载实例代码

    springboot 中文件上传下载实例代码

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。这篇文章主要介绍了springboot 中文件上传下载实例代码,需要的朋友可以参考下
    2017-11-11
  • 使用Java如何对复杂的数据类型排序和比大小

    使用Java如何对复杂的数据类型排序和比大小

    我相信大家在第一次接触算法的时候,最先接触的肯定也是从排序算法开始的,下面这篇文章主要给大家介绍了关于使用Java如何对复杂的数据类型排序和比大小的相关资料,需要的朋友可以参考下
    2023-12-12

最新评论