hibernate处理oracle 大字符数据CLOB

项目中遇到要对Oralce数据库的CLOB字段进行处理的问题,即实现对CLOB值的插入,更新,查询。 Clob的的操作一般有三种方法:1。JDBC的方法。2:把clob当作String来处理。3.直接使用Clob。这里我介绍的是第三种方法。使用 Hibernate3 来管理数据库的连接session。
这里用第三种方法。
1.在实体类里 定义一个CLOB 类型 和一个对它辅助用的字符串类型属性。如下:
private Clob clobnewscontent;
private String newscontent;
对应的映射文件由于newscontent只是辅助作用在数据库表里没有对应的列。所以不用配置。clobnewscontent属性配置如下:
<property name="clobnewscontent" type="clob" update="true" insert="true" >
<column name="NEWSCONTENT" />
</property>

newscontent用于接收页面传来的字符串信息。

下面说具体写入数据处理
插入: Session session= null;
Transaction tx =null;
try{
session =this.getHibernateTemplate().getSessionFactory().openSession();

news.setClobnewscontent(Hibernate.createClob(" "));

tx=session.beginTransaction();
session.save(news);
session.flush();

session.refresh(news, LockMode.UPGRADE);

org.hibernate.lob.SerializableClob cb = (org.hibernate.lob.SerializableClob)news.getClobnewscontent();
java.sql.Clob wrapClob = (java.sql.Clob) cb.getWrappedClob();
if(wrapClob instanceof oracle.sql.CLOB){
oracle.sql.CLOB clob = (oracle.sql.CLOB) wrapClob;
java.io.Writer writer = clob.getCharacterOutputStream();
String contentStr = news.getNewscontent();
writer.write(news.getNewscontent());
writer.close();
}
tx.commit();
session.close();

读取查询:
News news = new News();
news = newsDao.findNewsByID(id);
Clob clob = news.getClobnewscontent();
String contentStr = "";
if(clob != null)
contentStr = clob.getSubString(1, (int)clob.length());
news.setNewscontent(contentStr);
//news.setNewscontent(HtmlUtils.htmlUnescape(news.getNewscontent()));
return news;

修改:Session session= null;
Transaction tx =null;
try{
session =this.getHibernateTemplate().getSessionFactory().openSession();

news.setClobnewscontent(Hibernate.createClob(" "));

tx=session.beginTransaction();

session.saveOrUpdate(news);
session.flush();

session.refresh(news, LockMode.UPGRADE);

org.hibernate.lob.SerializableClob cb = (org.hibernate.lob.SerializableClob)news.getClobnewscontent();
java.sql.Clob wrapClob = (java.sql.Clob) cb.getWrappedClob();
if(wrapClob instanceof oracle.sql.CLOB){
oracle.sql.CLOB clob = (oracle.sql.CLOB) wrapClob;
java.io.Writer writer = clob.getCharacterOutputStream();
writer.write(news.getNewscontent());
writer.close();
}
tx.commit();
session.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值