百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Java往oracle存clob类型的值时,字符长度过长怎么办?

mhr18 2024-09-20 20:57 30 浏览 0 评论

业务场景

将照片转为数字长串后,由于字符过长,java往数据库中直接存为clob字段时,oracle会报ORA-01704问题:字符串文字过长。

这是因为一般对含有CLOB字段的数据操作。

如果CLOB字段的内容非常大的时候,会导致SQL语句过长。

隐式转换:oracle默认把字符串转换成varchar2类型,varchar2类型最大字符串的长度为4000,当字段长度比4000大时,所以会报ora-01704错误。

简言之,就是两个单引号之间的字符长度不能超过4000。

解决办法总结

试过几种办法,发现只有最后一种是有效的,现将错误与正确的方法都进行了总结,错误的进行避免,正确的可以借鉴。

1.将字符串按照固定长度截取,insert语句:to_clob('字符1' || '字符2' || '字符3' || '字符4' .......),此方法无效,隐式转换成了varchar2,字符长度超过4000;

2.将超长字段按照一定的长度进行截取,用to_clob()函数拼接insert语句,将截取的字符用连接符 ‘||’ 连接起来存入clob字段中,insert语句:to_clob('字符1') || to_clob('字符2') || to_clob('字符3') || to_clob('字符4') ....... 此方法有效。

/**
 * 将超长的内容转为clob可以保存的句式
 * 字符串每隔2000长度插入指定字符串 ' ) || TO_CLOB( '
 * @param original         处理超长字符串
 * @param insertString     插入字符串 ') || TO_CLOB('
 * @param interval         间隔的字符长度 2000
 * @return
 */
public static String stringInsertByInterval(String original, String insertString, int interval) {
   if (original == null) return "";
   Integer len = original.length();
   if (interval >= len) return original;

   String rtnString = original;
   if (original.length() > interval) {
      List<String> strList = new ArrayList<String>();
      Pattern p = Pattern.compile("(.{" + interval + "}|.*)");
      Matcher m = p.matcher(original);
      while (m.find()) {
         strList.add(m.group());
      }
      strList = strList.subList(0, strList.size() - 1);
      rtnString = StringUtils.join(strList, insertString);
   }
   rtnString = “'TO_CLOB('” + rtnString + "')";
   return rtnString;
}


作者:赵小可
链接:https://juejin.cn/post/7019677362035884063
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关推荐

升级JDK17的理由,核心是降低GC时间

升级前后对比升级方法1.JDK选择或安装2.JVM参数调整背景TLDR垃圾回收器的暂停问题对实时响应要求较高的服务来说,一直是个痛点,CMS和G1等主流垃圾回收器的数十毫秒乃至上百毫秒的暂停...

JDK 21:GC 不断改进,性能更上一层楼

随着2023年秋季发布的JDK21,现在有一个新的LTS版本可以进行基准测试并生成一些GC性能图表。JDK21和自JDK17以来的其他版本提供了一系列值得注意的功能,如虚拟线...

大数据开发工程师面试主要面试内容

大数据近年来,发展如火如荼,很多人都选择学习大数据专业或者转行大数据,大数据里又包含很多就业岗位,那么,我们在面试大数据开发工程师时,需要面试哪些内容呢。一起来看看!首先,不同岗位、不同公司、不同面试...

java程序员面试时经常被问到的10个问题

java程序员,尤其是做web开发的,面试时,面试官最喜欢问到以下10个问题,掌握面试的动态和技巧,有利于提高我们面试的成功率,了解以下10个问题,有利于java程序员的面试。1、简单描述一下Log4...

深入剖析 SQL 调优:导致性能瓶颈的语法问题、优化策略及面试题

在企业级应用开发中,数据库作为数据存储与检索的核心组件,其性能直接影响系统的响应速度与稳定性。而SQL语句作为与数据库交互的语言,编写的优劣往往决定了查询效率的高低。本文将聚焦于导致SQL性能...

MySQL面试题整理:从基础到高级的全面覆盖

基础问题什么是MySQL?它与其他数据库管理系统有何不同?MySQL是一个开源关系数据库管理系统(RDBMS),它使用结构化查询语言(SQL)来管理和操作数据。与其他数据库管理系统(如Oracle、M...

JDK从8升级到21的问题集(jdk8版本)

一、背景与挑战1.升级动因oOracle长期支持策略o现代特性需求:协程、模式匹配、ZGC等o安全性与性能的需求oAI新技术引入的版本要求2.项目情况o100+项目并行升级的协同作战o多技术栈并存o持...

科莱特SAP ABAP干货 | 基础篇:二、数据字典(1)

ABAP开发基础及应用二、数据字典(1)目标及说明目标:1、掌握SAP数据字典各种对象的定义和使用2、能根据业务数据要求,建立存储数据用的表和视图需求说明:1、在SAP中自建程序,以对一企业(自由行集...

Mycat入门(mycatalog)

一、Linux系统下搭建Mycat注:如果没有服务器可以选择虚拟机进行操作1、首先准备好服务器或者虚拟机2、安装和配置MySQL数据库2.1、删除原来的数据库//查询已安装的mariadb[root...

MySQL从入门到实战:表设计、索引优化与高频面试解析

一、业务场景驱动表设计:电商订单系统案例场景背景某电商平台需设计用户、商品、订单模块,要求支持以下操作:用户高频查询最新订单按商品分类+价格区间筛选商品统计每日订单金额建表实战--用户表(反范式设计...

oracle生成AWR报告的两种方法(oracle中awr报告的输出格式有哪些)

方法1:sqlplus中执行:execdbms_workload_repository.create_snapshot();@?/rdbms/admin/awrrpt.sql方法2:setpage...

Navicat Premium:数据库管理神器(navicat 本地数据库)

提供免费下载网站Mavom.cn在数据库管理的世界里,「NavicatPremium」是一款「一体化的数据库管理和迁移工具」,适用于MySQL、SQLServer、Oracle和PostgreSQ...

Iperius Backup功能特色(backup如何使用)

备份作业:1.文件夹备份:本地的文件夹,带SMB的路径文件夹,网络路径文件夹,NAS文件夹等等2.文件备份:对某个文件进行备份3.备份镜像:可以把系统刻录成镜像用于恢复(图1)4.FTP:自带FTP...

sql注入攻击,拿到网站账户,黑客这样神操作

首先的话,我们来仔细搞清楚这个攻击的流程,第一步就是了解一下,什么是sql?又什么是sql注入、sql注入的流程和步骤。1、首先什么是sql,Sql是一种数据库查询和程序设计的语言,这里的数据库是指存...

Java 8 新特性指南(java的八大特性)

本教程可以在实验楼(shiyanlou.com)中在线练习。一、实验简介Java8是近年来最后起来的一个Java编程语言发行版本。Oracle在2014年3月发布了它。该版本为Java带来...

取消回复欢迎 发表评论: