oracle中Blob和Clob型別的區別與用法

2021-07-02 01:23:54 字數 2364 閱讀 1355

blob和clob都是大字段型別,blob是按二進位制來儲存的,而clob是可以直接儲存文字的。其實兩個是可以互換的的,或者可以直接用lob欄位代替這兩個。但是為了更好的管理oracle資料庫,通常像、檔案、**等資訊就用blob欄位來儲存,先將檔案轉為二進位制再儲存進去。而像文章或者是較長的文字,就用clob儲存,這樣對以後的查詢更新儲存等操作都提供很大的方便。
資料庫中提供了三種字段型別varchar2、blob和clob用於儲存字串或二進位制資料,其中varchar2、clob用於儲存字串資料,而blob用於儲存二進位制資料。

varchar2採用單位元組儲存,有兩個最大長度:乙個是在字段型別4000;乙個是在pl/sql中變數型別32767。

今天犯了乙個小錯誤,就是函式的varchar2型別的返回值長度也是4000,而不是我以為的32767。 blob 採用單位元組儲存,適合儲存二進位制資料,如檔案。 clob 採用多位元組儲存,適合儲存大型文字資料。

oracle中處理blob/clob欄位的方式比較特別,所以需要特別注意下面兩點:1. 在oracle jdbc中採用流機制對 blob/clob 進行讀寫操作,所以要注意不能在批處理中讀寫 blob/clob欄位,否則將出現 stream type cannot be used in batching 異常。2. oracle blob/clob 字段本身擁有乙個游標(cursor),jdbc通過游標對blob/clob欄位進行操作,在blob/clob欄位建立之前,無法獲取其游標控制代碼,會出現 connection reset by peer: socket write error 異常。            

正確的做法是:首先建立乙個空 blob/clob 字段,再從這個空 blob/clob欄位獲取游標,例如下面的**:

preparedstatement ps=conn.preparestatement("insert into picture(image,resume) values(?,?)");

//通過oralce.sql.blob/clob.empty_lob()構造空blob/clob物件

ps.setblob(1, oracle.sql.blob.empty_lob());

ps.setclob(2, oracle.sql.clob.empty_lob());

ps.excuteupdate();

ps.close();

//再次對讀出blob/clob控制代碼 

ps=conn.preparestatement("select

image,resume from picture where id=? for

update");

ps.setint(1,100);

resultset rs=ps.executequery();

rs.next();

oracle.sql.blob imgblob=(oracle.sql.blob)rs.getblob(1);

oracle.sql.clob resclob=(oracle.sql.clob)rs.getclob(2);

//將二進位制資料寫入blob 

fileinputstream instream=new fileinputstream("c:");

outputstream outstream=imgblob.getbinaryoutputstream();

byte buf=new byte[10240];

int len;

while(len=instream.read(buf)>0)

instream.close();

outstream.cloese();

//將字串寫入clob 

resclob.putstring(1, "this is a clob");

//再將blob/clob欄位更新到資料庫

ps=conn.preparestatement("update picture set image=? and resume=? where id=?");

ps.setblob(1, imgblob);

ps.setclob(2, resclob);

ps.setint(3, 100 );

ps.executeupdate();

ps.close();

Oracle中的BLOB和CLOB欄位

一般為了更好的管理oracle資料庫,通常像 檔案 等資訊就用blob欄位來儲存,先將檔案轉為二進位制再儲存進去。而像文件或者是較長的文字,就用clob儲存,這樣對以後的查詢更新儲存等操作都提供很大的方便。1.blob blob全稱為二進位制大型物件 binary large object 它用於儲...

ORACLE中BLOB模糊查詢

blob儲存的資料是無法使用 或者 like 直接查詢的。查詢辦法是將blob轉成varchar2進行條件過濾 select from cms offline contents where utl raw.cast to varchar2 dbms lob.substr column,2000,1 ...

oracle中clob或blob處理

oracle中clob或blob處理 create table document id number 16 not null,content clob null 資料insert處理 try catch sqlexception e catch sqlexception ex finally fin...