oracle数据库中如何处理clob字段方法介绍

在知识库的建立的时候,用普通VARCHAR2存放文章是显然不够的,本文将详细将介绍oracle数据库中如何处理clob字段方法,需要的朋友可以参考下

在知识库的建立的时候,用普通VARCHAR2存放文章是显然不够的,只有区区4000的字节,放不了多少字,
而CLOB数据类型,则能最多存放8G的数据。但是这个字段处理起来有比较多的特殊性,记录一下。
插入:
直接写在SQL里面是不行的,一来SQL脚本有字符数限制,而来文章内容包含许多特殊字符,如换行,引号,
之类的东西,很麻烦。网上流行通用做法是先插入一个空CLOB字段,用empty_clob()方法来创建空字段,如:
代码如下:
INSERT INTO T_TOPIC(TOPIC_ID,TOPIC_CONTENT) VALUES(‘0000001′,empty_clob());

然后再用SELECT TOPIC_CONTENT FROM T_TOPIC WHERE TOPIC_ID=’0000001’FOR UPDATE的查询语句,
来构造一个更新的STATEMENT,在获取到ResultSet之后,对CLOB字段进行更新。
代码如下:
ResultSet rs = pstm.executeQuery();
if(rs.next()){
oracle.sql.CLOB lob =(CLOB)rs.getClob(1);
try {
Writer os = lob.getCharacterOutputStream();
os.write(dr.getField(“FLD_CONTENT”).asString());
os.flush();
} catch (IOException e) {
e.printStackTrace();
}
}

这个插入和更新操作要放在事务中,即获取到Connection后要设置setAutoCommit(false);
更新:
更新的时候也是采用SEELCT … FOR UPDATE方式
也要设置事务

读取:
代码如下:
CLOB clob = (CLOB)rs.getClob(“FLD_CONTENT”);
Reader reader = clob.getCharacterStream();
StringBuffer sb=new StringBuffer();
char[] cb = new char[1024];
try {
for(int len = reader.read(cb);len>0;len= reader.read(cb)){
sb.append(cb,0,len);
}
} catch (IOException e) {
throw new SQLException(“读取文章内容失败.”,e);
}

查询的特殊性:
有CLOB字段的数据表,在SQL语句中不能使用DISTINCT关键字进行筛选,即便关键字不用在CLOB字段名前,
实际上DISTINCT关键字都是对于SQL中所有字段有效。而CLOB字段是不能进行如同LIKE类似的匹配的,所以,
不能进行去重复操作。
两种解决办法:
1、在SQL中调用方法转成VARCHAR2字段后,再DISTINCT,这种方式的局限显而易见。
2、改变SQL脚本的书写方式,先查出没有CLOB字段的集合,然后在在外层用EXISTS关键字或IN关键字进行筛选。
代码如下:
//String sqlsel2 = “select jsonbody from db_ps_listcatalog where” +
// ” listtype =’sh11′ for update”;
// String col=”jsonbody”;

public boolean updateClob(String sql,String col,String buf){
boolean flag=false;
Statement stem=null;
Connection conn=null;
ResultSet rs=null;
Writer wr = null;
try{
conn= dp.getConnection();
conn.setAutoCommit(false);
stem=conn.createStatement();
rs = stem.executeQuery(sql);
if (rs.next()) {
CLOB clob = (CLOB) rs.getClob(col);
java.lang.reflect.Method methodToInvoke = clob.getClass().getMethod(
“getCharacterOutputStream”, (Class[]) null);
wr = (Writer) methodToInvoke.invoke(clob, (Object[]) null);
BufferedWriter bw = new BufferedWriter(wr);
bw.write(buf);
bw.flush();
bw.close();
conn.commit();
conn.close();
}
flag=true;
} catch (Exception ex){
try {
conn.rollback();
} catch (SQLException e) {
e.printStackTrace();
}
}
return flag;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/476373.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
利用可观察类型和RxJava提高Java函数的可复用性
上一篇 2025年11月8日 09:35:35
《艾尔登法环:黑夜君临》新更新让玩家很满意:多加点收费氪金项目吧!
下一篇 2025年11月8日 09:35:45

相关推荐

  • 学习MySQL的数据库备份和恢复技巧有哪些?

    学习mysql的数据库备份和恢复技巧有哪些? MySQL是一款常用的关系型数据库管理系统,为了确保服务器系统的稳定性和数据的安全性,数据库备份和恢复是非常重要的工作。本文将介绍一些学习MySQL数据库备份和恢复的技巧,以及相关的代码示例。 MySQL数据库备份 数据库备份是指将数据库中的数据和结构进…

    2026年10月5日
    100
  • 如何使用Java连接数据库 Java数据库连接步骤详解

    如何使用Java连接数据库 Java数据库连接步骤详解如何使用Java连接数据库 Java数据库连接步骤详解如何使用Java连接数据库 Java数据库连接步骤详解如何使用Java连接数据库 Java数据库连接步骤详解

    java连接数据库需按步骤操作并注意细节。一要选择合适的驱动,明确数据库类型,考虑版本兼容性和性能测试结果,如mysql用connector/j。二连接字符串配置须严格遵循格式要求,如jdbc:mysql://localhost:3306/mydatabase?user=myuser&pas…

    2026年10月5日 • 用户投稿
    100
  • Windows 环境通过Virtual Box快速体验TiDB 5.0

    【免责声明】本文仅代表个人观点,与任何公司无关。 来源公众号|SQL和数据库技术(ID:SQLplusDB) 在Windows环境中,通过Virtual Box快速体验TiDB 5.0 安装虚拟机Virtual Box,安装Oracle Linux 7,配置虚拟机联网,使用TiUP Playgrou…

    2026年10月5日
    900
  • Java中从文本文件读取并填充矩阵的教程

    本教程详细介绍了如何在Java中从特定格式的文本文件读取数据并将其填充到一个二维整数矩阵中。我们将首先探讨如何计算矩阵的正确维度,然后逐步讲解如何逐行读取文件内容,将每行解析为字符数组,并最终将这些字符转换为数字值填充到矩阵中,同时提供完整的代码示例和注意事项。 从文本文件读取矩阵数据 在java应…

    2026年10月5日
    200
  • LIMIT子句怎样控制返回行数?分页查询时OFFSET关键字的正确用法

    LIMIT子句怎样控制返回行数?分页查询时OFFSET关键字的正确用法LIMIT子句怎样控制返回行数?分页查询时OFFSET关键字的正确用法LIMIT子句怎样控制返回行数?分页查询时OFFSET关键字的正确用法LIMIT子句怎样控制返回行数?分页查询时OFFSET关键字的正确用法

    limit和offset用于分页查询,其中limit限制返回行数,offset指定起始位置。1. limit跟在select后,如select from table limit 10返回最多10行;2. offset与limit结合使用,如select from table limit 10 off…

    2026年10月4日 • 用户投稿
    100
  • yii中如何判断数据表是否存在于数据库中

    yii中如何判断数据表是否存在于数据库中yii中如何判断数据表是否存在于数据库中yii中如何判断数据表是否存在于数据库中yii中如何判断数据表是否存在于数据库中

    判断方法分为两步: 第一步:找出数据库中所有表名,表名得到的是二维数组。 第二步:判断表名是否存在二维数组中。 代码示例: 即构数智人 即构数智人是由即构科技推出的AI虚拟数字人视频创作平台,支持数字人形象定制、短视频创作、数字人直播等。 36 查看详情 $table_name =‘table’; …

    2026年10月3日 • 用户投稿
    000
  • 优化JPA查询性能:利用Tuple和Java Stream高效处理复杂关联数据

    优化JPA查询性能:利用Tuple和Java Stream高效处理复杂关联数据优化JPA查询性能:利用Tuple和Java Stream高效处理复杂关联数据优化JPA查询性能:利用Tuple和Java Stream高效处理复杂关联数据优化JPA查询性能:利用Tuple和Java Stream高效处理复杂关联数据

    本文探讨了在JPA/JPQL中处理复杂关联数据(特别是集合类型字段)时的性能瓶颈及优化策略。针对JPQL缺乏类似Oracle COLLECT函数的聚合能力,文章提出了一种高效解决方案:通过JPQL查询返回Tuple结果集,然后在应用程序层利用Java Stream API进行数据分组和映射。此方法显…

    2026年10月3日 • 用户投稿
    000
  • 在Spring Batch中实现跨多数据库的分布式事务

    在Spring Batch中实现跨多数据库的分布式事务在Spring Batch中实现跨多数据库的分布式事务在Spring Batch中实现跨多数据库的分布式事务在Spring Batch中实现跨多数据库的分布式事务

    本文旨在指导读者如何在Spring Batch应用中处理涉及多个数据库的分布式事务。当业务需求要求在一个批处理步骤(Step)中同时向不同数据库写入数据时,确保数据一致性至关重要。我们将探讨如何利用CompositeItemWriter聚合多个写入器,并通过配置JtaTransactionManag…

    2026年10月3日 • 用户投稿
    700
  • 掌握SQL中JOIN、WHERE和ORDER BY的组合使用技巧

    本文详细阐述了在SQL查询中同时使用JOIN、WHERE和ORDER BY子句的正确语法和逻辑顺序。重点强调了ON子句应紧随其关联的JOIN操作之后,以及WHERE子句必须位于ORDER BY子句之前,以确保查询的准确性和效率。通过具体示例,帮助读者构建结构清晰、功能完善的SQL查询语句。 SQL查…

    2026年10月2日
    100
  • 行存储(关系型数据库)与列存储(hbase,es聚合的doc_value)[通俗易懂]

    行存储(关系型数据库)与列存储(hbase,es聚合的doc_value)[通俗易懂]行存储(关系型数据库)与列存储(hbase,es聚合的doc_value)[通俗易懂]行存储(关系型数据库)与列存储(hbase,es聚合的doc_value)[通俗易懂]行存储(关系型数据库)与列存储(hbase,es聚合的doc_value)[通俗易懂]

    大家好,很高兴再次与大家见面,我是你们的朋友全栈君。 为什么要采用列式存储?列式存储(Columnar或column-based)与传统的关系型数据库的行式存储(Row-based storage)不同。简单来说,两者的区别在于表的组织方式:行式存储按行序列存储表。列式存储按列序列存储表。 在行式存…

    2026年10月2日 • 用户投稿
    100
  • java怎样连接并操作MySQL数据库 java数据库编程的入门教程

    java怎样连接并操作MySQL数据库 java数据库编程的入门教程java怎样连接并操作MySQL数据库 java数据库编程的入门教程java怎样连接并操作MySQL数据库 java数据库编程的入门教程java怎样连接并操作MySQL数据库 java数据库编程的入门教程

    java连接并操作mysql数据库的核心是使用jdbc api,通过引入mysql connector/j驱动、加载驱动类com.mysql.cj.jdbc.driver、定义正确的jdbc url、建立连接并使用preparedstatement执行sql来实现;2. jdbc是java数据库连接…

    2026年10月2日 • 用户投稿
    100
  • 甲骨文 MySQL 团队大规模裁员,引发创始人和社区担忧

    甲骨文 MySQL 团队大规模裁员,引发创始人和社区担忧甲骨文 MySQL 团队大规模裁员,引发创始人和社区担忧甲骨文 MySQL 团队大规模裁员,引发创始人和社区担忧甲骨文 MySQL 团队大规模裁员,引发创始人和社区担忧

    据 The Register 报道,甲骨文近期对 MySQL 团队实施了大规模人员调整,约 70 名员工受到影响,其中包括多位核心及资深开发人员。 MySQL 联合创始人 Monty Widenius 表达了对此事的“深切遗憾”。他表示,尽管 Oracle 向商业化和云服务转型并不令人意外,但他仍对…

    2026年10月2日 • 用户投稿
    100
  • Linux系统下如何搭建Java开发环境

    首先安装JDK,推荐OpenJDK并使用包管理器安装;接着配置JAVA_HOME和PATH环境变量;然后验证java与javac命令及编译运行测试程序;最后可选安装IntelliJ、Eclipse或VS Code等开发工具。 在Linux系统下搭建Java开发环境,核心步骤是安装JDK、配置环境变量…

    2026年10月2日
    100
  • SQL Server大战MySQL:谁将傲领数据库领域的宝座?

    SQL Server大战MySQL:谁将傲领数据库领域的宝座?SQL Server大战MySQL:谁将傲领数据库领域的宝座?SQL Server大战MySQL:谁将傲领数据库领域的宝座?SQL Server大战MySQL:谁将傲领数据库领域的宝座?

    SQL Server大战MySQL:谁将傲领数据库领域的宝座? 随着信息时代的快速发展,数据库成为了各个行业中不可或缺的重要组成部分。在数据库领域,有两个独占鳌头的巨头SQL Server和MySQL,它们之间的竞争不仅仅是技术的较量,更是对市场份额和用户口碑的争夺。那么,SQL Server和My…

    2026年10月2日 • 用户投稿
    300
  • MySQL和Oracle:学习大数据技术时的两大选择,如何抉择?

    MySQL和Oracle:学习大数据技术时的两大选择,如何抉择?MySQL和Oracle:学习大数据技术时的两大选择,如何抉择?MySQL和Oracle:学习大数据技术时的两大选择,如何抉择?MySQL和Oracle:学习大数据技术时的两大选择,如何抉择?

    MySQL和Oracle:学习大数据技术时的两大选择,如何抉择? 当今社会,数据正以爆炸式的速度增长。对于那些想要进入大数据行业的学习者来说,熟悉常见的数据库管理系统是至关重要的一步。而在数据库领域,MySQL和Oracle是两个备受关注的选项。那么,在学习大数据技术时,应该如何选择MySQL还是O…

    2026年10月2日 • 用户投稿
    100
  • SQL Server还是MySQL?最新研究揭秘最佳数据库选择。

    SQL Server还是MySQL?最新研究揭秘最佳数据库选择。SQL Server还是MySQL?最新研究揭秘最佳数据库选择。SQL Server还是MySQL?最新研究揭秘最佳数据库选择。SQL Server还是MySQL?最新研究揭秘最佳数据库选择。

    SQL Server还是MySQL?最新研究揭秘最佳数据库选择 近年来,随着互联网和大数据的快速发展,数据库的选择成为了企业和开发者们面临的一个重要问题。在众多数据库中,SQL Server和MySQL作为两个最为常见和广泛使用的关系型数据库,备受争议。那么,在SQL Server和MySQL之间,…

    2026年10月2日 • 用户投稿
    800
  • java使用教程怎样进行java程序的性能调优 java使用教程的性能优化实用技巧​

    java使用教程怎样进行java程序的性能调优 java使用教程的性能优化实用技巧​java使用教程怎样进行java程序的性能调优 java使用教程的性能优化实用技巧​java使用教程怎样进行java程序的性能调优 java使用教程的性能优化实用技巧​java使用教程怎样进行java程序的性能调优 java使用教程的性能优化实用技巧​

    java性能瓶颈常见于cpu密集型操作、内存与gc问题、i/o阻塞及数据库慢查询;2. 提升性能需从jvm调优(如选择g1/zgc、合理设置堆大小)、代码优化(高效算法、减少对象创建、并发工具使用)、外部依赖优化(数据库索引、缓存、消息队列)入手;3. 避免内存泄漏需注意静态集合管理、监听器注销、t…

    2026年10月2日 • 用户投稿
    200
  • MySQL数据库技术是现在就业市场的热门需求吗?

    MySQL数据库技术是现在就业市场的热门需求吗?MySQL数据库技术是现在就业市场的热门需求吗?MySQL数据库技术是现在就业市场的热门需求吗?MySQL数据库技术是现在就业市场的热门需求吗?

    MySQL数据库技术是现在就业市场的热门需求吗? 随着互联网的快速发展,大数据时代的到来,数据库技术逐渐成为各行业的核心需求之一。在众多数据库技术中,MySQL因其成本低、性能高、稳定可靠等优点,成为各大企业和组织中最受欢迎的开源关系型数据库管理系统。那么,MySQL数据库技术在现在的就业市场是否也…

    2026年10月1日 • 用户投稿
    200
  • MySQL vs. Oracle:从技术角度来看,谁更具竞争力?

    MySQL vs. Oracle:从技术角度来看,谁更具竞争力?MySQL vs. Oracle:从技术角度来看,谁更具竞争力?MySQL vs. Oracle:从技术角度来看,谁更具竞争力?MySQL vs. Oracle:从技术角度来看,谁更具竞争力?

    MySQL vs. Oracle:从技术角度来看,谁更具竞争力? 引言: 随着互联网的迅猛发展,大数据时代的到来,数据库管理系统(DBMS)的选择变得尤为重要。在众多DBMS中,MySQL和Oracle是两个备受关注的数据库管理系统。虽然两者都有着自己的优势和劣势,但是从技术角度来看,谁更具竞争力?…

    2026年10月1日 • 用户投稿
    100
  • 解决macOS上CMake无法正确检测Temurin JDK 8 JNI的问题

    解决macOS上CMake无法正确检测Temurin JDK 8 JNI的问题解决macOS上CMake无法正确检测Temurin JDK 8 JNI的问题解决macOS上CMake无法正确检测Temurin JDK 8 JNI的问题解决macOS上CMake无法正确检测Temurin JDK 8 JNI的问题

    本文旨在解决mac++OS环境下,使用Adoptium Temurin JDK 8时,CMake的FindJNI模块无法正确检测JNI路径的问题。即使JAVA_HOME已正确配置,CMake仍可能报错提示缺少JNI相关路径。本教程将详细介绍如何通过在CMake构建命令中显式传递JNI所需的关键变量,…

    2026年10月1日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信