oracle CLOB与BLOB的区别及使用

本文详细介绍了数据库中的BLOB和CLOB两种大字段类型的用途和区别,包括它们如何存储不同形式的数据,如图片、音乐、长篇文章等,并提供了JAVA和PL/SQL中的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB则可以直接存储文字的。在ORACLE数据库中,像图片、文件、音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去;
像文章或者是较长的文字,就用CLOB存储,方便查询更新存储。

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

BLOB:
  二进制大对象,是一个可以存储二进制文件的容器;BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)。处理BLOB的主要思想就是让文件处理器不去理会文件是什么,而是关心如何去处理它。但这种处理大数据对象的方法是把双刃剑,它有可能引发一些问题,如存储的二进制文件过大,会使数据库的性能下降。

CLOB和BLOB的区别:
  CLOB使用CHAR来保存数据。 如:保存XML文档。
  BLOB就是使用二进制保存数据。 如:保存位图。

(1)JAVA里面对CLOB的操作

  1 相对比较小的,用String进行直接操作,把CLOB看成字符串类型即可
  2 如果比较大,用 getAsciiStream 或者 getUnicodeStream 以及对应的 setAsciiStream 和 setUnicodeStream 即可

读取数据

ResultSet rs = stmt.executeQuery("SELECT  * 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();

(2)PL/SQL中使用dbms_log处理

create or replace procedure insertBlob(id varchar2,imgFile varchar2)
 is 
	img_file bfile;
	img_blob blob;
	lob_length number;
begin 
	insert into person values(id,empty_blob());
	select photo  into img_blob from person where pid =id;
	img_file := bfilename('PHOTO',imgFile);
	dbms_lob.open(img_file);
	lob_length :=dbms_lob.getlength(img_file);
	dbms_lob.loadfromfile(img_blob,img_file,lob_length);
	dbms_lob.close(img_file);
	commit;
	end;
	/

empty_blob():LOB 已初始化,但未填充数据
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

但行益事莫问前程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值