**:
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 ...