在訪問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 ...