1. 程式人生 > >Clob 欄位轉String

Clob 欄位轉String

問題:

  在專案上,有大文字文件,需要存入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;
	}

完成任務收工~!