操作Oracle類型CLOB和BLOB

來源:互聯網
上載者:User

Oracle中,Varchar2支援的最大位元組數為4KB,所以對於某些長字串的處理,我們需要用CLOB類型的欄位,CLOB欄位最大支援4GB。

 

還有其他幾種類型:

blob:二進位,如果exe,zip
clob:單位元組碼,比如一般的文字檔.
nlob:多位元組碼,如UTF格式的檔案.

以下就是對CLOG欄位的操作方法,在我們的項目中協助文檔部分用到。

1、首先是寫入

/* 以下表PF_HELP_CONTENT中的HCONTENT欄位時CLOB類型的 */<br />// 通過序列器產生協助ID<br />Map map = Query.getMap("Select TO_CHAR(SEQ_HID.nextval) HID FROM DUAL ");<br />hid = String.valueOf(map.get("HID"));<br />//插入一條資料,注意CLOB欄位,需要先插入一個空的clob類型 empty_clob(),然後再單獨更新clob欄位<br />sql = "Insert INTO PF_HELP_CONTENT(HID,HCONTENT) VALUES (?,empty_clob()) ";<br />try<br />{<br /> //執行插入<br /> rtn = DbUtils.executeUpdate(sql,hid);<br /> /* 插入成功後,修改HCONTENT欄位內容 */<br /> //取得資料庫連接<br /> Connection conn = DbUtils.getConnection();<br /> //手動提交<br /> conn.setAutoCommit(false);<br /> //定義ResultSet 和 Clob 變數<br /> ResultSet rs = null;<br /> oracle.sql.CLOB clob = null;<br /> //更新SQL<br /> String sqlclob = "Select HCONTENT FROM PF_HELP_CONTENT Where HID=? FOR Update ";<br /> java.sql.PreparedStatement pstmt = conn.prepareStatement(sqlclob);<br /> //hid是varchar2類型的,所以用setString<br /> pstmt.setString(1,hid);<br /> //執行update語句<br /> rs= pstmt.executeQuery();<br /> if(rs.next())<br /> {<br /> //取得剛才的HCONTENT的內容,也就是剛才添加的empty_clob()<br /> clob = (oracle.sql.CLOB)rs.getClob(1);<br /> }<br /> //需要用clob.getCharacterOutputStream()流方式輸出<br /> Writer write = clob.getCharacterOutputStream();<br /> //寫入具體內容,helpform.getHContent() 存的是協助的內容<br /> write.write(helpform.getHContent());<br /> write.flush();<br /> write.close();<br /> rs.close();<br /> //提交<br /> conn.commit();<br /> conn.close();<br />}<br />catch(Exception ex)<br />{<br /> //.........<br />}<br />

 

2、修改CLOB欄位內容

/* 修改跟插入時基本一致,也是用for update來實現 */<br />//如果修改前的欄位內容長度大於當前修改的長度時,末尾的部分內容仍然會存在<br />//所以在修改內容前,需要將PF_HELP_CONTENT內容置空<br />sql = " Update PF_HELP_CONTENT SET HCONTENT=empty_clob() Where HID=? ";<br />try<br />{<br /> rtn = DbUtils.executeUpdate(sql,hid);<br /> //以下操作跟添加時一樣<br /> Connection conn = DbUtils.getConnection();<br /> conn.setAutoCommit(false);<br /> ResultSet rs = null;<br /> oracle.sql.CLOB clob = null;<br /> String sqlclob = "Select HCONTENT FROM PF_HELP_CONTENT Where HID=? FOR Update ";<br /> java.sql.PreparedStatement pstmt = conn.prepareStatement(sqlclob);<br /> pstmt.setString(1,hid);<br /> rs= pstmt.executeQuery();<br /> if(rs.next())<br /> {<br /> clob = (oracle.sql.CLOB)rs.getClob(1);<br /> }<br /> Writer write = clob.getCharacterOutputStream();<br /> write.write(helpform.getHContent());<br /> write.flush();<br /> write.close();<br /> rs.close();<br /> conn.commit();<br /> conn.close();<br />}<br />catch(Exception ex)<br />{<br /> //...<br />}<br />

 

3、取出CLOB欄位的常值內容
/* 前面部分都一致 */<br />Connection conn = DbUtils.getConnection();<br />conn.setAutoCommit(false);<br />ResultSet rs = null;<br />oracle.sql.CLOB clob = null;<br />String sqlclob = "Select HCONTENT FROM PF_HELP_CONTENT Where HID=? ";<br />java.sql.PreparedStatement pstmt = conn.prepareStatement(sqlclob);<br />pstmt.setString(1,hid);<br />rs= pstmt.executeQuery();<br />if(rs.next())<br />{<br /> //rs.getClob(1)中參數1指的是HCONTENT欄位索引,第一個欄位從1開始而不是從0。<br /> //也可以用欄位名來取rs.getClob("HCONTENT")<br /> clob = (oracle.sql.CLOB)rs.getClob(1);<br />}<br />if(clob==null || clob.length()==0)<br />{<br /> hcontent = "";<br />}else<br />{<br /> //取CLOB欄位內容為字串<br /> hcontent=clob.getSubString((long)1,(int)clob.length());<br />}<br />rs.close();<br />conn.close();<br />request.setAttribute("HCONTENT",hcontent);<br />

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.