BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的。

其实两个是可以互换的的,或者可以直接用LOB字段代替这两个。但是为了更好的管理
ORACLE数据库,
通常像图片、文件、音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去。
而像文章或者是较长的文字,就用CLOB存储,这样对以后的查询更新
存储等操作都提供很大的方便。

CLOB 定义

数据库中的一种保存文件所使用的类型。

Character Large Object

SQL 类型 CLOB 在 JavaTM 编程语言中的映射关系。SQL CLOB 是内置类型,它将字符大对象 (Character Large Object) 存储为数据库表某一行中的一个列值。默认情况下,驱动程序使用 SQL locator(CLOB) 实现 Clob 对象,这意味着 CLOB 对象包含一个指向 SQL CLOB 数据的逻辑指针而不是数据本身。Clob 对象在它被创建的事务处理期间有效。

在一些数据库系统里,也使用Text 作为CLOB的别名,比如SQL Server

BLOB 定义

BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。

在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。

BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)。

根据Eric Raymond的说法,处理BLOB的主要思想就是让文件处理器(如数据库管理器)不去理会文件是什么,而是关心如何去处理它。

但也有专家强调,这种处理大数据对象的方法是把双刃剑,它有可能引发一些问题,如存储的二进制文件过大,会使数据库的性能下降。在数据库中存放体积较大的多媒体对象就是应用程序处理BLOB的典型例子。

CLOB和BLOB的区别

CLOB使用CHAR来保存数据。 如:保存XML文档。

   BLOB就是使用二进制保存数据。 如:保存位图。

JAVA里面对CLOB的操作

在绝大多数情况下,使用2种方法使用CLOB

1 相对比较小的,可以用String进行直接操作,把CLOB看成字符串类型即可

2 如果比较大,可以用 getAsciiStream 或者 getUnicodeStream 以及对应的 setAsciiStream 和 setUnicodeStream 即可

读取数据

ResultSet rs = stmt.executeQuery(“SELECT TOP 1 * FROM Test1”);

rs.next();

Reader reader = rs.getCharacterStream(2);

插入数据

PreparedStatement pstmt = con.prepareStatement(“INSERT INTO test1 (c1_id, c2_vcmax) VALUES (?, ?)”);

pstmt.setInt(1, 1);

pstmt.setString(2, htmlStr);

pstmt.executeUpdate();

更新数据

Statement stmt = con.createStatemet();

ResultSet rs = stmt.executeQuery(“SELECT * FROM test1”);

rs.next();

Clob clob = rs.getClob(2);

long pos = clob.position(“dog”, 1);

clob.setString(1, “cat”, len, 3);

rs.updateClob(2, clob);

rs.updateRow();

JAVA中如何使用oracle中Clob类型字段

原文(全)
https://blog.csdn.net/jungeCSND/article/details/112567383

最近在项目中做接口对接需要把报文保存到数据库,本来声明列为VARCHAR2类型保存,但是后来在测试的时候发现报文长度过长,orcal中VARCHAR2最大只能保存4000个字符,因此导致错误,后来转为用cloub来保存报文,但是cloub比String操作起来较为麻烦,因此做了一个小demo来整理一下自己实现的方法:

1、建个测试表用来保存,查询数据如下:

-- Create table
create table PRPSSTEST
(id             INTEGER not null,requestapp     VARCHAR2(20),requestappname VARCHAR2(20),requestdate    DATE,requestdata    CLOB,responsedate   DATE,responsecode   VARCHAR2(10),responsedata   CLOB,attr           VARCHAR2(200),consumetime    INTEGER
)
tablespace TBS_ZSSALEpctfree 10initrans 1maxtrans 255storage(initial 64Knext 1Mminextents 1maxextents unlimited);

1、根据cloub字段值查询SQL
例:根据请求报文中包含“111”来查询

select * from prpsstest A where dbms_lob.instr(A.REQUESTDATA,'111',1,1) > 0;

2、SSH框架中使用Clob类型字段
实体类如下:
package com.sinosoft.entity;


// Generated by Hibernate Tools 3.2.0.b9 (sinosoft version)import static javax.persistence.GenerationType.SEQUENCE;import java.sql.Clob;
import java.util.Date;import javax.persistence.*;/*** generated by Tools.Don't edit.*/
@Entity
@Table(name = "PRPSSTEST")
public class PrpsSTest implements java.io.Serializable {private static final long serialVersionUID = 1L;private long id;private String requestapp;private String requestappname;private Date requestdate;private Clob requestdata;private Date responsedate;private String responsecode;private Clob responsedata;private String attr;private int consumetime;@SequenceGenerator(name = "generator", allocationSize = 1, sequenceName = "SEQ_prpsstest")@Id@GeneratedValue(strategy = SEQUENCE, generator = "generator")@Column(name = "id")public long getId() {return id;}public void setId(long id) {this.id = id;}@Column(name = "REQUESTAPP")public String getRequestapp() {return requestapp;}public void setRequestapp(String requestapp) {this.requestapp = requestapp;}@Column(name = "REQUESTAPPNAME")public String getRequestappname() {return requestappname;}public void setRequestappname(String requestappname) {this.requestappname = requestappname;}@Column(name = "REQUESTDATE")public Date getRequestdate() {return requestdate;}public void setRequestdate(Date requestdate) {this.requestdate = requestdate;}@Column(name = "REQUESTDATA")public Clob getRequestdata() {return requestdata;}public void setRequestdata(Clob requestdata) {this.requestdata = requestdata;} @Column(name = "RESPONSEDATE")public Date getResponsedate() {return responsedate;}public void setResponsedate(Date responsedate) {this.responsedate = responsedate;}@Column(name = "RESPONSECODE")public String getResponsecode() {return responsecode;}public void setResponsecode(String responsecode) {this.responsecode = responsecode;}@Column(name = "RESPONSEDATA")public Clob getResponsedata() {return responsedata;}public void setResponsedata(Clob responsedata) {this.responsedata = responsedata;} @Column(name = "ATTR")public String getAttr() {return attr;}public void setAttr(String attr) {this.attr = attr;}@Column(name = "CONSUMETIME")public int getConsumetime() {return consumetime;}public void setConsumetime(int consumetime) {this.consumetime = consumetime;}}

1,java中给cloub字段赋值:
Hibernate.createClob(“111”)

2、HQL根据CLOUB类型查询条件语句,与sql语句大同小异

3、查询出来的CLOUB字段转为String

public static String ClobToString(Clob clob) {String clobStr = "";Reader is = null;try {is = clob.getCharacterStream();BufferedReader br = new BufferedReader(is);String s = null;s = br.readLine();StringBuffer sb = new StringBuffer();while (s != null) {sb.append(s);s = br.readLine();}clobStr = sb.toString();} catch (IOException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}return clobStr;}

3、SpingBoot JPA框架中使用Clob类型字段
实体类如下:这里为了简便 直接使用String对应数据库中cloub字段

package com.sinosoft.entity;// Generated by Hibernate Tools 3.2.0.b9 (sinosoft version)import static javax.persistence.GenerationType.SEQUENCE;import java.sql.Clob;
import java.util.Date;import javax.persistence.*;/*** generated by Tools.Don't edit.*/
@Entity
@Table(name = "PRPSSTEST")
public class PrpsSTest implements java.io.Serializable {private static final long serialVersionUID = 1L;private long id;private String requestapp;private String requestappname;private Date requestdate;private String requestdata;private Date responsedate;private String responsecode;private String responsedata;private String attr;private int consumetime;@SequenceGenerator(name = "generator", allocationSize = 1, sequenceName = "SEQ_prpsstest")@Id@GeneratedValue(strategy = SEQUENCE, generator = "generator")@Column(name = "id")public long getId() {return id;}public void setId(long id) {this.id = id;}@Column(name = "REQUESTAPP")public String getRequestapp() {return requestapp;}public void setRequestapp(String requestapp) {this.requestapp = requestapp;}@Column(name = "REQUESTAPPNAME")public String getRequestappname() {return requestappname;}public void setRequestappname(String requestappname) {this.requestappname = requestappname;}@Column(name = "REQUESTDATE")public Date getRequestdate() {return requestdate;}public void setRequestdate(Date requestdate) {this.requestdate = requestdate;}@Lob@Basic(fetch = FetchType.EAGER)@Column(name="REQUESTDATA", columnDefinition="CLOB", nullable=true)public String getRequestdata() {return requestdata;}public void setRequestdata(String requestdata) {this.requestdata = requestdata;}@Column(name = "RESPONSEDATE")public Date getResponsedate() {return responsedate;}public void setResponsedate(Date responsedate) {this.responsedate = responsedate;}@Column(name = "RESPONSECODE")public String getResponsecode() {return responsecode;}public void setResponsecode(String responsecode) {this.responsecode = responsecode;}@Lob@Basic(fetch = FetchType.EAGER)@Column(name="RESPONSEDATA", columnDefinition="CLOB", nullable=true)public String getResponsedata() {return responsedata;}public void setResponsedata(String responsedata) {this.responsedata = responsedata;}@Column(name = "ATTR")public String getAttr() {return attr;}public void setAttr(String attr) {this.attr = attr;}@Column(name = "CONSUMETIME")public int getConsumetime() {return consumetime;}public void setConsumetime(int consumetime) {this.consumetime = consumetime;}}

1、使用JPA根据Cloub字段值查询语句:
@Query(value = "select * from PrpsSTest where dbms_lob.instr(requestdata,?1,1,1) > 0 ",nativeQuery = true)
public PrpsSTest getTestByRequestData(String usercode);

CLOB与BLOB的区别及用途相关推荐

  1. CLOB、BLOB , CLOB与BLOB的区别

    CLOB 定义 数据库中的一种保存文件所使用的类型. Character Large Object SQL 类型 CLOB 在 JavaTM 编程语言中的映射关系.SQL CLOB 是内置类型,它将字 ...

  2. oracle CLOB与BLOB的区别及使用

      BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB则可以直接存储文字的.在ORACLE数据库中,像图片.文件.音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去; ...

  3. Mybatis操作Oracle中的Clob和Blob字段

    文章目录 Mybatis操作Oracle中的Clob和Blob字段 [ 我测试用的Mybatis Plus ] A.数据准备 A-1. Oracle中创建测试的表结构:Byte_Array_Test, ...

  4. 【转】【iOS知识学习】_视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途...

    原文网址:http://blog.csdn.net/weasleyqi/article/details/8090373 iOS视图控制对象生命周期-init.viewDidLoad.viewWillA ...

  5. 简单介绍Tomcat中catalina.out 和 catalina.log的区别和用途

    本文主要介绍了Tomcat中catalina.out 和 catalina.log的区别和用途详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 catalina. ...

  6. 基于PLSQL的数据库备份方法及如何解决导出clob和blob类型数据报错的问题

    基于PLSQL的数据库备份方法及如何解决导出clob和blob类型数据报错的问题 参考文章: (1)基于PLSQL的数据库备份方法及如何解决导出clob和blob类型数据报错的问题 (2)https: ...

  7. 通过JDBC和Hibernate对Clob和Blob的操作

    通过JDBC和Hibernate对Clob和Blob的操作,插入和读取. 一,JDBC方式: 1,当lob的内容很小的时候,用sta.setString(2, "clob content&q ...

  8. _视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途...

    iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.viewWillDisappear.viewDidDisappear的区别及用途 ...

  9. CLOB 和 BLOB

    oracle 中有两个类型  blob  和   clob 1. BLOB (binary large object)----二进制大对象,是一个可以存储二进制文件的容器. 在老项目整改的时候看到对于 ...

最新文章

  1. php utf-8读取,PHP读取文件,解决中文乱码UTF-8的方法分析
  2. kubernetes API Server 权限管理实践
  3. 微信小程序 - 文字收缩与展开
  4. TypeScript void 和 undefined 的区别
  5. 在8080端口输出php的输出,端口8080上的PHP错误
  6. mui 头部横向滚动菜单
  7. es6 模块的整体加载
  8. 下个目标是攻克FIFA游戏?DeepMind让AI自学传球配合
  9. POJ3169 Layout(差分约束)
  10. Linux 系统中随机数在 KVM 中的应用
  11. 程序设计导引及在线实践之大整数乘法
  12. 华为NP课程笔记3-OSPF3
  13. plc 滑台流程图_动力滑台液压系统及PLC控制设计
  14. (七)CMake变量及其设置
  15. 推荐:2010年度十大杰出IT博客
  16. C# List集合快速拼接字符串
  17. [Asp.Net Core]NET5跨平台的本质
  18. 《拳皇15》先导预告 多位角色回归、细节下月公开
  19. L160. 相交链表
  20. 如何将WPS转Word

热门文章

  1. 【璟丰机电】美国派克Parker产品在FPD中的行业应用案例盘点
  2. 企业微信如何建立部门?企业成员怎么加入部门?
  3. 我用diffusion把姐妹cos成了灭霸的模样
  4. 指纹识别-(1)基本知识
  5. 拉拉米抢单发单系统源码+二开ui带视频介绍+ 放量功能
  6. winform抓取淘宝宝贝详细页的上下架时间等信息
  7. 三角网导线平差实例_三角网近似平差及边长计算表
  8. 什么是字节序(端序、低端字节序、高端字节序、网络字节序)
  9. 明年春天见!罗永浩发声:还完债当天就重返科技行业
  10. 吴恩达-目标检测讲解笔记