Hibernate處理Oracle大文字資料Clob
阿新 • • 發佈:2018-12-21
近日做了一個專案,頁面上有一個textarea框,資料量比較大,剛開始,沒考慮資料量超大的情況,pojo類中textarea框對應的欄位用string,XX.hbm.xml裡對應的欄位也用string,Oracle資料庫對應欄位用Clob,儲存完全沒問題。直到測試人員直接貼上進去好幾頁的文字,問題出來了,顯示依然沒問題,就是載入速度慢,一個頁面要等好幾秒甚至十幾秒才能出來。然後搜了半天,用Hibernate又給處理了一番,雖然還是要卡頓一下,不過也就一兩秒了。記錄一下:
1、資料庫對應欄位依然是Clob。
2、POJO類對應欄位修改為Clob。
3、xx.hbm.xml修改為java.sql.Clob。
4、form表單對應欄位是string。
5、controller類中處理如下:
5.1、儲存:
po.setAroundSituation(Hibernate.createClob(form.getAroundSituation()));
this.dao.save(po);
5.2、讀取:
form.setAroundSituation(ClobToString(po.getAroundSituation()));
把Clob轉換為String的方法:
public static String ClobToString(Clob clob) { String clobStr = ""; Reader is = null; try { is = clob.getCharacterStream(); // 得到流 BufferedReader br = new BufferedReader(is); String s = null; s = br.readLine(); StringBuffer sb = new StringBuffer(); //執行迴圈將字串全部取出賦值給StringBuffer,由StringBuffer轉成String while (s != null) { sb.append(s); s = br.readLine(); } clobStr = sb.toString(); } catch (IOException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return clobStr; }