Posted on 2010-01-14 21:51
斷點 閱讀(346)
評論(0) 編輯 收藏 所屬分類:
Oracle
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或者說更大數據來說這樣的讀寫方式,遠不如用流進行讀寫來得更現實一些。
posted @ 2009-05-16 19:26 斷點 閱讀(166) | 評論 (0)