用JDBC操縱BLOB和CLOB資料

2021-08-30 19:08:52 字數 1694 閱讀 6074

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

driver mydriver = (driver)

class.forname("oracle.jdbc.driver.oracledriver").newinstance();

conn = mydriver.connect("jdbc:oracle:thin:" , props);

statement stmt = conn.createstatement();

stmt.execute("select blob_content from lobtest where id=1");

resultset rs = stmt.getresultset();

system.out.println("resultset result:"+rs);

while ( rs.next() ) ...

返回的資料物件正確,是oracle.sql.blob 物件,然後可以使用該物件進行方法訪問。

但當使用oracle jdbc driver 配置連線池後,使用datasource 取得資料庫連線之後,查詢clob 資料,賦值給oracle.sql.clob 的物件,這是就會報型別轉換錯誤。

在網路上有相應的解決方案,但都是依賴於某一種應用伺服器所提供的oracle連線環境。

下面是乙個比較好的解決方案:

1。必須有支援jdbc3.0以上規範的oracle驅動。

2。更新blob欄位資料

public void updateblob(string tablename, string blobfeild, string prykey, string prykeyvalue, byte blob)

throws ioexception, sqlexception ... else ...

}} finally ...

}

3。獲取blob欄位資料

public byte findblob(string tablename, string blobfeild, string prykey, string prykeyvalue) throws sqlexception ...

}} finally ...

return blob;

}

4。更新clob欄位資料

public void updateclob(string tablename, string clobfeild, string prykey, string prykeyvalue, string clob)

throws ioexception, sqlexception ... else ...

}} finally ...

}

5。獲取clob欄位資料

public string findclob(string tablename, string clobfeild, string prykey, string prykeyvalue) throws sqlexception ...

}} finally ...

return clob;

}

採用以上這種方式可以避免對連線池提供方的依賴。

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

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

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

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

ORACLE 查詢BLOB和CLOB型別資料

其中t.logcontent是 表裡面的blob欄位,此處用了dbms lob.substr 函式用來操作的大型物件,叫做大型物件定位器,前面的utl raw.cast to varchar2函式用來將blob轉為varchar2,但是此方法查詢出的資料長度不可超過4000 select dbms ...