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;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值