oracle中Blob和Clob類型的區別



一、oracle中Blob和Clob類型的區別
BLOB和CLOB都是大字段類型,BLOB是按二進制來存儲的,而CLOB是可以直接存儲文字的。其實兩個是可以互換的的,或者可以直接用LOB字段代替這兩個。但是為了更好的管理ORACLE數據庫,通常像圖片、文件、音樂等信息就用BLOB字段來存儲,先將文件轉為二進制再存儲進去。而像文章或者是較長的文字,就用CLOB存儲,這樣對以后的查詢更新存儲等操作都提供很大的方便。
BLOB全稱為二進制大型對象(Binary Large Object)。它用於存儲數據庫中的大型二進制對象。可存儲的最大大小為4G字節 
CLOB全稱為字符大型對象(Character Large Object)。它與LONG數據類型類似,只不過CLOB用於存儲數據庫中的大型單字節字符數據塊,不支持寬度不等的字符集
可存儲的最大大小為4G字節,Clob可以存儲單字節字符數據,Blob可以存儲無結構的二進制數據
二、empty_clob()和empty_blob()的使用:
在向帶有Lob類型的字段加入數據時,使用EMPTY_CLOB()初始化CLOB字段,然后再使用輸出流向字段中寫數據(這些數據往往都是字節流量相對較大的). 如果是直接在oracle客戶端向表中寫數據,就不用這么麻煩了.好了,具體的操作:

 

CREATE TABLE article(

 

subject VARCHAR2(50 char),

 

content CLOB ,

 

tstamp TIMESTAMP DEFAULT SYSDATE

 

);

 

 

 

--使用EMPTY_CLOB()來初始化CLOB字段

 

String strSql = "INSERT INTO article(subject,content) VALUES('文章標題:Empty_clob()的使用方法',EMPTY_CLOB())";

 

Connection conn = db.getConnection();

 

conn.setAutoCommit(false);

 

 

 

PreparedStatement ptmt = conn.prepareStatement(sqlBuffer.toString());

 

ptmt.executeUpdate();

 

strSql = "select content from article where subject = "+subject+" for update ";

 

ResultSet rs = ptmt.executeQuery(strSql);

 

if (rs.next()) {

 

/**//* 取出此CLOB對象 */

 

oracle.sql.CLOB clob = null;

 

clob = (oracle.sql.CLOB) rs.getClob("content");

 

/**//* 向CLOB對象中寫入數據 */

 

BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream());

 

out.write(content);

 

out.close();

 

out = null;

 

conn.commit();

 

}

在平台中使用的原理:

1、通過select語句獲得需要修改的行+for update

2、遍歷resultset 同rs.next()獲得blob列字段對象

3、同blob列字段對象創建輸出流

4、數據流中寫入msg

5、commit提交到db

代碼如下:

BLOB pBlob = (BLOB)RS.getBlob(strFName);
OutputStream out = pBlob.getBinaryOutputStream();
byte[] pBytes = (byte[])(byte[])pImageFieldValues.get(i);
out.write(pBytes);
out.close();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM