1. 程式人生 > >Hibernate處理Oracle大文字資料Clob

Hibernate處理Oracle大文字資料Clob

近日做了一個專案,頁面上有一個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;
    }