问题:
在项目上,有大文本文档,需要存入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;
}
完成任务收工~!