Clob 欄位轉String
阿新 • • 發佈:2018-11-22
問題:
在專案上,有大文字文件,需要存入clob 欄位,如何取出clob 欄位來? 應用的Mybatis框架
解決思路:
第一: 若是能保證資料量小於4000的話, to_char(clob欄位) 是一個非常簡單省事的方案;
第二:若是欄位長度不能固定,肯定有大於4000 的資料量,這個時候,可以寫一個實體類,
然後 string 欄位,然後get set操作;預設生成就可以;【也可以解決問題】;
第三: 就是需要寫一個類,專門去做clob 轉字串處理;【這裡著重講解這個】
解決方案:
首先寫這個類
public class OracleClob2String { public static String ClobToString(Clob clob) throws SQLException, IOException { String reString = ""; Reader is = clob.getCharacterStream();// 得到流 BufferedReader br = new BufferedReader(is); String s = br.readLine(); StringBuffer sb = new StringBuffer(); while (s != null) {// 執行迴圈將字串全部取出付值給StringBuffer由StringBuffer轉成STRING sb.append(s + "\n"); s = br.readLine(); } reString = sb.toString(); return reString; } }
第二:在service層對獲取的list<map<string,object>> 進行clob 轉 string
需要注意的是:list<map<string,object>> 這裡必須事object 接收資訊,不能是string,
public List<Map<String, Object>> getTzgglist(Map<String, String> map) { List<Map<String, Object>> list = Dao.getTzggList(map); for (Map<String, Object> tz : list) { try { tz.put("ggnr",OracleClob2String.ClobToString((Clob)tz.get("ggnr"))); } catch (SQLException e) { // TODO 自動生成的 catch 塊 e.printStackTrace(); } catch (IOException e) { // TODO 自動生成的 catch 塊 e.printStackTrace(); } } return list; }
完成任務收工~!