Oracle中Blob和Clob

來源:互聯網
上載者:User

Blob是指二進位大對象也就是英文Binary Large Object的所寫;
Clob是指大字元對象也就是英文Character Large Object的所寫。
因此這兩個類型都是用來儲存大量資料而設計的,其中BLOB是用來儲存大量位元據的;CLOB用來儲存大量文本資料。

在JDBC中有兩個介面對應資料庫中的BLOB和CLOB類型,java.sql.Blob和java.sql.Clob。和你平常使用資料庫一樣你可以直接通過ResultSet.getBlob()方法來擷取該介面的對象。與平時的尋找唯一不同的是得到Blob或Clob的對象後,我們並沒有得到任何資料,但是我們可以這兩個介面中的方法得到資料。
例如:
Blob b=resultSet.getBlob(1);
InputStream bin=b.getBinaryStream();
Clob c=resultSet.getClob(2);
Reader cReader=c.getCharacterStream():
 
另外還有一種擷取方法,不使用資料流,而是使用資料區塊。
例如
Blob b=resultSet.getBlob(1);
byte data=b.getByte(0,b.length());
Clob c=resultSet.getClob(2);
String str=c.getSubString(0,c.length());
在這裡要說明一下,這個方法其實並不安全,如果你很細心的話,那很容易就能發現getByte()和getSubString()兩個方法中的第二個參數都是int類型的,而BLOB和CLOB是用來儲存大量資料的。而且Bolb.length()和Clob.length()的傳回值都是long類型的,所以很不安全。

那麼有人肯定要問既然已經有VARCHAR和VARBINARY兩中類型,為什麼還要再使用另外的兩種類型呢?
原因:VARCHAR和VARBINARY兩種類型是有自己的局限性的。首先說這兩種類型的長度還是有限的不可以超過一定的限額,以VARCHAR在ORA中為例長度不可以超過4000;而LONGVARCHAR類型的一個重要缺陷就是不可以使用LIKE這樣的條件檢索。

另外就是在資料庫中VARCHAR和VARBINARY的存取是將全部內容從全部讀取或寫入,對於100K或者說更大資料來說這樣的讀寫方式,遠不如用流進行讀寫來得更現實一些。


 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.