MyBatis查询Oracle数据库,数据库字段类型为Long时报错
·
这篇文章主要介绍了mybatis查询oracle数据库,当字段类型为long类型的踩坑记录,具有很好的参考价值,记录一下,希望可以帮助到大家。
写在前面,Oracle的Long类型是个深坑,如果实际情况允许更改数据类型,尽量更改为CLOB类型
问题描述:
最近在开发中,遇到查询oracle long类型异常的问题,业务是查询一个表Biz_Ad(广告表),其中有一个字段(Detail)是Long类型,在java实体中用String接收,查询语句如下
Select * From Biz_Ad
很简单,但是报错很以外
org.springframework.jdbc.UncategorizedSQLException: Error attempting to get column 'DETAIL' from result set.
Cause: java.sql.SQLException: 流已被关闭;
uncategorized SQLException; SQL state [99999];
error code [17027]; 流已被关闭;
nested exception is java.sql.SQLException: 流已被关闭
网上查了一下,具体为什么会发生错误原因未知,有了解的可以评论告知一下。
解决方案:
第一种方式:不使用LONG类型,修改为CLOB或者Varchar2(推荐)
第二种方式:将查询的字段类型对应的jdbcType修改为LONGVARBINARY,将LONG类型字段显式的放在查询的末尾
Entity中
...省略其他字段,LONG类型的字段放在末尾
/**
* 广告详情(html页)
*/
@TableField(jdbcType = JdbcType.LONGVARBINARY)
private String detail;
Mapper.xml文件中
<resultMap id="BaseResultMap" type="xxx" >
<result column="id" property="id" />
<result column="name" property="name" />
<result column="detail" property="detail" jdbcType="LONGVARBINARY" />
</resultMap>
自定义SQL中
SELECT ID,NAME,DETAIL FROM BIZ_AD
问题解决~,希望这个世界少点坑
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)