Mybatis操作Oracle中的Clob和Blob字段

news/2024/5/8 8:18:06/文章来源:https://blog.csdn.net/qq_17847881/article/details/130076615

文章目录

  • Mybatis操作Oracle中的Clob和Blob字段
    • 1. Oracle中创建测试的表结构:Byte_Array_Test
    • 2. Mybatis配置MapperXml,用Map<String, Object>接受Clob和Blob的数据,如下图:
    • 3. 代码中获取Clob和Blob的值
      • 3-1 接收Blob和Clob数据代码:
      • 3-2 Blob实例
      • 3-3 Clob实例
      • 3-4 扩展: Blob转byte[],Clob转string,不考虑对象内置方法的话,亦可用如下自定义方法
    • 4. 将Blob生成的字节数组byte[],写入到文件,如:test.jpg

Mybatis操作Oracle中的Clob和Blob字段

说明:CLOB和BLOB的区别,这两个被统称为LOB,即Large Object(大对象类型)最本质的区别:CLOB的C,可以理解为Char,保存的是字符大对象BLOB的B,即Binary,保存的是二进制大对象CLOB应该转换成StringBLOB应该转换成byte[]

1. Oracle中创建测试的表结构:Byte_Array_Test

在这里插入图片描述

2. Mybatis配置MapperXml,用Map<String, Object>接受Clob和Blob的数据,如下图:

在这里插入图片描述

3. 代码中获取Clob和Blob的值

3-1 接收Blob和Clob数据代码:

Blob blobVal = (Blob)map.get("BLOB");  		// 引号中的BLOB为字段名
Clob clobVal = (Clob)map.get("CLOB");		// 引号中的CLOB为字段名

3-2 Blob实例

@RequestMapping("getArr/{id}")
public String getArr(@PathVariable String id) throws SQLException {Map<String, Object> map = byteArrayTestService.find(id);// 获取Oracle数据库中Blob的值Blob blob = (Blob)map.get("BLOB");// Blob对象自带的方法getBytes,将Blob转为字节数组byte[]byte[] bytes1 = blob.getBytes(1, (int) blob.length());return "success";
}

3-3 Clob实例

@RequestMapping("getArr/{id}")
public String getArr(@PathVariable String id) throws SQLException {Map<String, Object> map = byteArrayTestService.find(id);// 获取Oracle数据库中Clob的值Clob clob = (Clob)map.get("CLOB");// Clob对象自带的方法getSubString,将Clob转为StringString clobStr1 = clob.getSubString(1, (int) clob.length());return "success";
}

3-4 扩展: Blob转byte[],Clob转string,不考虑对象内置方法的话,亦可用如下自定义方法

/**
* BLOB转byte[]
* @param blob
* @return
*/
private byte[] blobToBytes(Blob blob) {BufferedInputStream is = null;try {is = new BufferedInputStream(blob.getBinaryStream());byte[] bytes = new byte[(int) blob.length()];int len = bytes.length;int offset = 0;int read = 0;while (offset < len && (read = is.read(bytes, offset, len - offset)) >= 0) {offset += read;}return bytes;} catch (Exception e) {return null;} finally {try {is.close();is = null;} catch (IOException e) {return null;}}
}/**
* CLOB转String
* @param clob
* @return
*/
public static String clobToString(Clob clob) {try {Reader inStreamDoc = clob.getCharacterStream();char[] tempDoc = new char[(int) clob.length()];inStreamDoc.read(tempDoc);inStreamDoc.close();return new String(tempDoc);} catch (IOException e) {e.printStackTrace();} catch (SQLException es) {es.printStackTrace();}return null;
}

4. 将Blob生成的字节数组byte[],写入到文件,如:test.jpg

public class FileUtil {/*** 方法功能:将字节数组写入到新建文件中。* @param String fname* @param byte[] msg* @return boolean* */public static boolean save2File(String fname, byte[] msg){OutputStream fos = null;try{File file = new File(fname);File parent = file.getParentFile();boolean bool;if ((!parent.exists()) && (!parent.mkdirs())) {return false;}fos = new FileOutputStream(file);fos.write(msg);fos.flush();return true;}catch (FileNotFoundException e){return false;}catch (IOException e){File parent;return false;}finally{if (fos != null) {try{fos.close();}catch (IOException e) {}}}}// 写入文件功能测试public static void main(String[] args)  {String msgStr = "我是java爱好者,测试数据";byte[] bytes = msgStr.getBytes();String filename = "D:\\test\\test.txt";//注意修改为自己的文件名boolean flag = FileUtil.save2File(filename, bytes);System.out.println("flag = "+ flag );}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_96317.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日做题总结——day01

目录 选择题 for循环 指针数组 位段 getchar 大小端存储 进制与格式控制符 位运算 数组指针 二维数组的存储 计算二进制中1的个数 斐波那契数列求递归次数 编程题 删除公共字符 排序子序列 倒置字符串 选择题 for循环 解析&#xff1a;该题主要看for…

el-form, 时间选择器,不管选择什么时间范围,值一直是当月一号

yyyy-MM-DD 修改为 yyyy-MM-dd 就好了&#xff0c;bug千奇百怪 修改前 修改后

极致低延迟收集器ZGC探索——亚毫秒级,常数级暂停O(1)原理

ZGC 收集器 ZGC收集器&#xff08;Z Garbage Collector&#xff09;是由Oracle公司为HotSpot JDK研发的&#xff0c;最新一代垃圾收集器。有说法使用这个名目标是取代之前的大部分垃圾收集器&#xff0c;所以才叫ZGC&#xff0c;表示极致的Extremely&#xff0c;或者最后的&am…

RHCE——shell脚本练习

一.实验要求 1、判断web服务是否运行&#xff08;1、查看进程的方式判断该程序是否运行&#xff0c;2、通过查看端口的方式判断该程序是否运行&#xff09;&#xff0c;如果没有运行&#xff0c;则启动该服务并配置防火墙规则。 ​2、使用curl命令访问第二题的web服务&#xff…

Vulnhub靶场DC-1练习

目录0x00 准备0x01 主机信息收集0x02 站点信息收集0x03 漏洞查找与利用0x00 准备 下载链接&#xff1a;https://download.vulnhub.com/dc/DC-1.zip 介绍&#xff1a;There are five flags in total, but the ultimate goal is to find and read the flag in root’s home dir…

Linux宝塔安装msyql服务,默认密码,允许远程登录问题解决

一、首先我在宝塔安装mysql服务是5.7 1.1MySQL数据库5.6之前&#xff08;不包括&#xff09;默认密码为空&#xff0c;用户不用输入密码&#xff0c;直接回车登陆 mysql -uroot -p password:(空) 1.2.MySQL数据库5.6之后&#xff08;包括&#xff09;默认密码是MySQL数据库随机…

Springboot基础学习之(十四):修改使用数据库中的数据源,修改为Druid:通过Druid实现后台监控

文章的顺序&#xff0c;是本人学习Springboot这个框架的先后顺序 这一篇文章讲解的是如何整合数据库中的数据源 Java程序很大一部分要操作数据库&#xff0c;为了提高性能操作数据库的时候&#xff0c;又不得不使用数据库连接池。 Druid 是阿里巴巴开源平台上一个数据库连接池实…

web综合

一&#xff0c;基于域名访问www.openlab.com 在文件当中写入IP与域名的映射关系 在windows中写入 也可以在客户端的/etc/hosts下写入映射关系 创建目录 [rootserver ~]# mkdir -pv /www/openlab 将所需要的内容写入对应目录当中 [rootserver ~]# echo welcome to openlab ! &…

五分钟排查Linux的健康状态

五分钟排查Linux的健康状态1. CPU1.1 top命令1.2 什么是负载1.3 vmstat2. 内存2.1 观测命令2.2 CPU缓存2.3 HugePage2.4 预先加载3. I/O3.1 观测命令3.2 零拷贝4. 网络参考&#xff1a;《Linux运维实战》、xjjdog 操作系统作为所有程序的载体&#xff0c;对应用的性能影响是非常…

华为运动健康服务Health Kit 6.10.0版本新增功能速览!

华为运动健康服务&#xff08;HUAWEI Health Kit&#xff09;6.10.0 版本新增的能力有哪些&#xff1f; 阅读本文寻找答案&#xff0c;一起加入运动健康服务生态大家庭&#xff01; 一、 支持三方应用查询用户测量的连续血糖数据 符合申请Health Kit服务中开发者申请资质要求…

初识掌控板2.0、官方拓展板和配套编程软件mpython

不是广告&#xff01;&#xff01;不是广告&#xff01;&#xff01; 一、掌控板2.0概览 掌控板又名掌上联网计算机&#xff0c;是一款为青少年学习Python编程和创意制造&#xff0c;特别是物联网应用而设计的开源硬件。内置microPython开源嵌入式Python运行环境&#xff0c;可…

查询优化器:选择最优的查询路径

当我们通过解析器理解了SQL语句要干什么之后&#xff0c;接着会找查询优化器&#xff08;Optimizer&#xff09;来选择一个最优的查询路径。 可能有同学这里就不太理解什么是最优的查询路径了&#xff0c;这个看起来确实很抽象&#xff0c;当然&#xff0c;这个查询优化器的工…

C51单片机串口通信(概念部分)

1.通信的基本概念 1.1&#xff1a;串行通信与并行通信 &#xff08;1&#xff09;.串行通信 串行通信是指用一根数据线将 一个字节的八个bit位连接&#xff0c;从低位开始依次传输。 优点&#xff1a;成本便宜&#xff0c;传输稳定 缺点&#xff1a;速度慢 并行通信是指将一…

阿里云蔡英华:云智一体,让产业全面迈向智能

4月11日&#xff0c;在2023阿里云峰会上&#xff0c;阿里云智能首席商业官蔡英华表示&#xff0c;算力的飞速发展使数字化成为确定&#xff0c;使智能化成为可能。阿里云将以云计算为基石&#xff0c;以AI为引擎&#xff0c;参与到从数字化迈向智能化的划时代变革中。 基于服务…

第三十天 Maven高级

目录 Maven高级 1. 分模块设计与开发 1.1 介绍 1.2实践 1.3 总结 2. 继承与聚合 2.1 继承 2.2 聚合 2.3 继承与聚合对比 3. 私服 3.1 场景 3.2 介绍 3.3 资源上传与下载 Maven高级 Web开发讲解完毕之后&#xff0c;我们再来学习Maven高级。其实在前面的课程当中&am…

论文笔记|CVPR2023:Semantic Prompt for Few-Shot Image Recognition

论文地址&#xff1a;https://arxiv.org/pdf/2303.14123.pdf 这是一篇2023年发表在CVPR上的论文&#xff0c;论文题目是Semantic Prompt for Few-Shot Image Recognitio&#xff0c;即用于小样本图像识别的语义提示。 1 Motivation 第一&#xff0c;最近几项研究利用 语义信…

矿泉水为什么会溴酸盐超标

矿泉水为什么会溴酸盐超标&#xff1f; 水生产企业多使用臭氧消毒&#xff0c;不过&#xff0c;水生产企业不存在水运输路途遥远的问题&#xff0c;因此可以使用臭氧消毒。同时&#xff0c;也是因为臭氧在消毒后会直接变成氧气&#xff0c;所以不会有使用氯消毒后的那种味道&a…

我在“Now In Android”中学到的 9 件事

我在“Now In Android”中学到的 9 件事 Now in Android是一款功能齐全的 Android 应用程序&#xff0c;完全使用 Kotlin 和 Jetpack Compose 构建。它遵循 Android 设计和开发最佳实践&#xff0c;旨在为开发人员提供有用的参考。 https://github.com/android/nowinandroid UI…

【软考备战·希赛网每日一练】2023年4月11日

文章目录一、今日成绩二、错题总结第一题第二题第三题第四题第五题三、知识查缺题目及解析来源&#xff1a;2023年04月11日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析&#xff1a; 策略模式&#xff1a;定义一系列算法&#xff0c;把它们一个个封装起来&#…

c++学习之c++对c的扩展1

目录 1.面向过程与面向对象的编程 2.面向对象编程的三大特点 3.c对c的扩展&#xff1a; 1.作用域运算符&#xff1a;&#xff1a; 2.命名空间 1.c命名空间&#xff08;namespace&#xff09; 2.命名空间的使用 1.在不同命名空间内可以创建相同的名称 2.命名空间只能在全…