jdbc操作Blob和Clob欄位與字串的轉換

2021-07-09 05:58:13 字數 2310 閱讀 2784

oracle的資料庫裡對於大字段儲存,通常有3種型別,一種就是所謂的blob型別,另一種就是clob型別,第三種是nclob型別,關於這三者者的使用範圍,應該說沒有嚴格意義上的要求,但大部分場景下我用經常使用blob儲存二進位制資料型別的東西,例如,單子流等,而使用clob來儲存大型文字資料,例如一篇文獻,或乙個xml等等,但是更好的情況下建議使用nclob來儲存雙位元組的文字資料,三者的儲存方式如下**所示

blob

byte

clob

char

nclob

double char

使用時候,需要注意,一般使用char型別,或者double char型別,不會出現亂碼情況,而使用byte型別儲存文字型別,非常容易出現亂碼,這一點,筆者深有體會,也許你存文字進blob欄位時你可能感覺沒問題,但是在取出來轉換時一些特殊符號,有時候就莫名其妙的亂碼了。所以對於文字型別,建議還是使用clob,或者nclob儲存,以避免一些亂碼問題.

另外需要注意的是:

如果你的單資料量只有幾千個字元,建議按照varchar/varchar2方式儲存,這樣提高訪問速度。但是對於幾萬或者更多的字元量,建議按照lob(clob/nclob)方式。

以下有幾點請注意:

(1)面對插入的情況,應該首先對插入的blob/clob所在字段,賦予乙個empty_blob()或empty_clob。再以更新方式,流形式插入

(2)所有的blob/clob物件(jdbc基本標準)沒有實現物件序列化,一般第三方(vender)類包可能會重新實現,比如weblogic的jdriver for oracle

(3)在從資料庫獲取clob/blob欄位的時候,不一定就以blob/clob物件位元組流獲取(有可能就是以其它位元組流方式獲取) 

下面給出blob與clob欄位,在向資料庫插入,以及讀取時與字串互相轉換**

(1) 插入blob欄位型別

file file = new file("e:\\測試\\dog.jpg");  

int length = (int)file2.length();

inputstream f = new fileinputstream(file);

ps.setbinarystream(1, f, length);

(2) 資料庫插入clob欄位型別

file file = new file("e:\\測試資料\\文獻評估.txt");  

int length = (int)file.length();

inputstream f = new fileinputstream(file);

ps.setasciistream(1, f, length);

(3) blob欄位轉換成string字串

/**

* blob欄位的通用轉換

* 注意可能出現亂碼

* @return 轉好的字串,

* **/

public string blobtostring(blob blob)

return str.tostring();

}catch (exception e) finallycatch(exception e)

} return null;

}

(4) clob欄位轉換成string字串

/**

* clob欄位的通用轉換

* @return 轉好的字串,

* **/

public static string clobtostring(clob clob) throws sqlexception, ioexception

restring = sb.tostring(); //轉換成字串,進行返回

return restring;

}

(5) 將字串轉換成blob,或者clob欄位型別

/**注意筆者是 oracle11g

* @param 需要轉換的引數

* 字串轉換成blob,clob,以及blob,clob轉換成字串

* @throws exception

* * */

public void covert(string str) throws exception catch (serialexception e) catch (sqlexception e)

}

至此,大字段的資料型別的轉換,插入,都可以實現了,另外需要注意的是,筆者的測試是在jdk7的版本和oracle 11g的資料庫下測試的,一些低的版本的jdk有些api可能不一樣

jdbc操作Blob和Clob欄位與字串的轉換

b size large oracle的資料庫裡對於大字段儲存,通常有3種型別,一種就是所謂的blob型別,另一種就是clob型別,第三種是nclob型別,關於這三者者的使用範圍,應該說沒有嚴格意義上的要求,但大部分場景下我用經常使用blob儲存二進位制資料型別的東西,例如,單子流等,而使用clob...

用JDBC操縱BLOB和CLOB資料

在訪問oracle 資料庫,對oracle 的blob 和clob 進行操作的時候,當通過oracle jdbc driver 來呼叫的時,如下所例 driver mydriver driver class.forname oracle.jdbc.driver.oracledriver newins...

JDBC 操作Blob資料

除了解決statement的拼串 sql問題之外,preparedstatement還有什麼好處?1 preparedstatement操作blob的資料,而statement做不到。2 preparedstatement可以實現更高效的批量操作。插入blob型別的資料必須使用preparedsta...