oracle中clob型別的使用

2021-07-10 15:45:49 字數 1776 閱讀 4490

**:

oracle資料庫當需要存入大資料量(大於4000)時,varchar2不夠用,可以使用clob,本文描述clob怎麼和hibernate一起使用。

以公告notice的公告內容noticecontent為例說明:

notice表notice_content欄位為clob型別;

notice類的noticecontent屬性為string;

notice_hbm_xml對映檔案為text型別:

lob資料不能象其它型別資料一樣直接插入(insert)。 插入前必須先插入乙個空的lob物件,clob型別的空物件為empty_clob (),blob型別的空物件為empty_blob()。

之後通過select命令查詢得到先前插入的記錄並鎖定,繼而將空物件修改為所要插入的lob物件。

在插入到更新之間一定要將自動提交設為false,否則,再次查詢時就不能正確更新,查詢時一定要用select *** from table where ... for update   

如果不加for   update會報:「row containing the lob value is not locked」;

如果在插入前沒有將自動提交設為false會報  「fetch out of sequence」。

stringbuffer sqlstr = new stringbuffer();

"t.notice_status,t.sender,t.eff_date,t.exp_date,t.creater,t.create_time," +

"t.notice_content) values (");

string sql = sqlstr.tostring();

class.forname(driverclassname);

connection con = drivermanager.getconnection(url, username, password);

con.setautocommit(false);//設定不自動提交

preparedstatement pstmt = con.preparestatement(sql);

string content = notice.getnoticecontent().replace('\'', '\"');

try

pstmt = con.preparestatement("update notice set notice_content = ? where notice_id=?");//修改notice_content欄位的內容

pstmt.setclob(1, clob);

pstmt.setlong(2, notice.getnoticeid());

pstmt.executeupdate();

con.commit();

if (nps != null && nps.size() > 0)

} catch (exception e) finally

if(con!=null)

}

對於clob的修改,可在修改該錶的其他字段資訊時同時將clob欄位修改為empty_clob (),然後才對clob欄位單獨修改,方法與上相同。

存入clob型別的文字一般很多,頁面不會直接使用textarea,可以使用開源的ckeditor文字編輯器代替,使用方法很簡單很實用,詳見:ckeditor的使用示例

oracle中Blob和Clob型別的區別與用法

blob和clob都是大字段型別,blob是按二進位制來儲存的,而clob是可以直接儲存文字的。其實兩個是可以互換的的,或者可以直接用lob欄位代替這兩個。但是為了更好的管理oracle資料庫,通常像 檔案 等資訊就用blob欄位來儲存,先將檔案轉為二進位制再儲存進去。而像文章或者是較長的文字,就用...

java操作Oracle的CLOB型別

今天同事問我是否用過oracle中的clob型別,說實話 沒聽過。oracle 中sql 語句中的兩個單引號之間的字元數不能大於 4000 的限制。data data 在sql語句之間,當data的值大於 4000 個位元組時 就會報錯。oracle 往有clob型別的表中插資料 1.其他字段照常插...

操作Oracle的clob型別字段

引用 1.插入和更新 插入一條資料,注意clob欄位,需要先插入乙個空的clob型別 empty clob 然後再單獨更新clob欄位 在插入到更新之間一定要將自動提交設為false,否則,再次查詢時就不能正確更新,查詢時一定要用select from table where for update ...