1)clob型別的資料不能直接insert,要先通過empty_clob()方法給它分配乙個locator(同理,blob的用empty_blob()函式分配locator).然後把它select出來(此時它當然沒有資料,但結果集不是空的),得到乙個clob的物件,修改該物件的內容讓它滿足我們的需要,再通過update方法更新該行記錄.
2) 通過select修改含lob型別的記錄時一定要鎖定該行(通過for update關鍵字實現),否則oracle會報錯.
3) 剛插入的記錄就select for update, 會出現"違反讀取順序"錯誤,解決辦法是將自動提交功能置為false,即不允許自動提交,然後commit它,再select,就可以了!
下例是插入clob
public boolean addcase(case newcase)
string sql="insert into case(cid,cname,caddr,cdescribe,ctime) values(?,?,?,empty_clob(),?)";
ps=conn.preparestatement(sql);
ps.setint(1, cid);
ps.setstring(2, newcase.getcname());
ps.setstring(3, newcase.getcaddr());
ps.setstring(4, newcase.getctime());
int insertresult=ps.executeupdate();
conn.commit();
ps.clearparameters();
if(insertresult>0)
conn.commit();
conn.setautocommit(true);
return true;
}}catch(exception e)finally
return false;}
下例是插入blob
public void insertblob()
string sql2="insert into blobtest(bid,bname) values(?,empty_blob())";
ps = conn.preparestatement(sql2);
ps.setint(1,fid);
int i=ps.executeupdate();
system.out.println("執行了更新:"+i);
conn.commit();
string sql3="select bname from blobtest where bid = ? for update";
ps = conn.preparestatement(sql3);
ps.setint(1,fid);
rs = ps.executequery();
if(rs.next())
conn.commit();
conn.setautocommit(true);
} catch (exception e) finally
}
blob欄位型別
blob的定義 blob binary large object 二進位製大物件,是乙個可以儲存二進位制檔案的容器。在計算機中,blob常常是資料庫中用來儲存二進位制檔案的字段型別。根據eric raymond的說法,處理blob的主要思想就是讓檔案處理器 如資料庫管理器 不去理會檔案是什麼,而是關...
BLOB欄位操作
置為空或null update blob test set b content null update blob test set b content empty blob 判斷內容不為空 select from blob test where dbms lob.getlength b conten...
mysql操作BLOB欄位
平常的sql語句,大都是乙個字串,而blob是字串無法表示的 這就需要另一種方式來執行語句,即stmt,理論上適合任意sql語句 初始化 mysql stmt init 解析sql語句 mysql stmt prepare 例 update x set y 待確定欄位用問號表示 驗證待確定字段數量 ...