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 已初始化,但未填充数据