近日做了一个项目,页面上有一个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;
}