oracle数据库BLOB类型字段超4000新增报错处理方式

当向Oracle数据库插入BLOB类型数据时,如果使用utl_raw.cast_to_raw函数会遇到超过4000字符的限制。文章介绍了通过将字符串直接转换为Byte数组并存储为Blob字段来规避这一限制的方法。在JavaBean中添加Byte数组字段,Service层将内容转换为Byte数组,XML配置不再使用utl_raw.cast_to_raw函数,而是直接存储Byte数组。
摘要由CSDN通过智能技术生成

java中utl_raw.cast_to_raw怎么处理大于4000字符

本文主要介绍"java中utl_raw.cast_to_raw如何处理大于4000字符",希望能够解决您遇到有关问题,下面我们一起来看这篇 “java中utl_raw.cast_to_raw如何处理大于4000字符” 文章。

BLOB类型数据存取

在往Oracle数据库里面存Blob数据时,出现了如下的报错:

ORA-01461:仅能绑定要插入 LONG 列的 LONG 值

原因在于使用 utl_raw.cast_to_raw函数转 Blob数据大小不能超过 VARCHAR(4000)

网上基本的我都看了,但是没有能解决我这个问题的。只能找找公司大佬。

这里采用的解决方式是,直接把String转Byte数组然后直接存Blob,不用转了。

步骤一:修改JavaBean

首先在 JavaBean里面创一个新的字段 类型是 Byte数组,方便存取

//名字随便取了,其它字段这里就不放了    
private byte aByte[];

步骤二:修改Service层代码

我们这里需要存的是Content,前端给的是String,我们转成Byte数组可以直接往Blob类型里面存

 byte[] gbks = itemPlan.getContent().getBytes("UTF-8");
   itemPlan.setAByte(gbks);
步骤三:修改xml

原来我们是这么写的

CONTENT = utl_raw.cast_to_raw(#{content,jdbcType=String})

现在直接存Byte数组就不用这个函数转了

 <if test="content != null">
        CONTENT = #{aByte},
 </if>

取也一样

Service

public ItemPlan getItemPlanById(String consentId){
        try{
        ItemPlan itemPlan = itemPlanMapper.getItemPlanById(consentId);
        byte[] aByte = itemPlan.getAByte(); // 取出二进制数组
        String a = new String(aByte, Charset.forName("UTF-8")); //转换成字符串
         itemPlan.setContent(a); // 赋值给前端展示字段
     return itemPlan:
    }catch(Exception e)

    {
        log.error("[稽查、监察计划根据ID查询]异常信息为:"+e.getMessage());
        throw new Exception(e.getMessage());
    }

xml

<select id-getItemPlanById”resultType="com sinosoft.ie. model.ItemPlan
SELECT
CONSENT ID AS consentId,
CONSENT NAME AS consentName,
CONSENT DESC AS consentDesc,
CONSENT VERSION AS consentVersion,
USEFLAG AS useflag,
CREATE DATE AS createDate,
UPDATE DATE AS updateDate,
CREATOR ID AS creatorId,
UPDATOR ID AS updatorId,
ITEM ID AS itemId,
"TYPEAS type,
CONTENT AS aByte,
BEGIN DATE AS beginDate,
END DATE AS endDate
from ITEM PLAN
where USEFLAG ='1’ AND CONSENT ID = #consentId, jdbcType=VARCHAR)
/select>

在这里插入图片描述

关于 “java中utl_raw.cast_to_raw如何处理大于4000字符” 就介绍到这。希望大家多多支持编程宝库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值