CLOB处理的处理简化

 我们一般对于大批的字符数据处理都采用CLOB字段,而不同的数据库对CLOB字段的处理,都有所不同。诸如MySQL和SQLServer与普通的String是一样的,而ORACL则会因为版本的不同而不同,对于Oracle9i的补丁版以上,可以当作普通的String处理(使用的驱动必须是ORAcle10g或以上)。但是对于Oracle9i(非补丁版)则需要特别处理。

 对于普通的类型,我们这里不作阐述,而对于普通的JDBC的处理方式,思路很简单,在新增的时候,将此字段插入一个empty,让后做更新操作,操作方式为流的形式。而对于使用Hibernate作为数据访问层的项目来说,那么这个处理就相对而言麻烦点,以下分2种情况进行讨论。

 1、纯Hibernate处理型
   首先,我们设定我们的处理方式是,在实体类中增加一个String属性,对应Clob属性的String结果。这个属性不对应数据的任何Mapping.诸如:
  <property   name="content"   type="java.sql.Clob"  update="true" insert="true"         column="CONTENT"  />此处对应数据库中的字段
 实体类属性:
public class News  {
  private Clob content;  
  private String contentString ;
  ...
}

 其处理代码段:
    Session session = getSession();
    entity.setContent(Hibernate.createClob(" "));
        //如果是新增数据:
        session.save(entity);
        //如果是更新数据:
        session.update(entity);
        //共同片断
    session.flush();
    session.refresh(entity, LockMode.UPGRADE);
    java.io.Writer pw = ((oracle.sql.CLOB) ((org.hibernate.lob.SerializableClob) entity.getContent())
                .getWrappedClob()).getCharacterOutputStream();
    pw.write(entity.getContentString());
    pw.flush();
    pw.close();
    releaseSession(sessio;

2、Spring Integrate with Hibernate
   如果是使用了Spring的话,那么我们可以考虑以一种更简单的方式来处理,由Spring代理来处理Clob,但是程序依然像普通String一样对待,这样一来,处理起来与普通String就没有任何区别。那么我们要做的就只有余下一点

  首先在Spring的配置文件中加入Spring对Clob的处理类:
  <bean id="nativeJdbcExtractor"    class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor" lazy-init="true" />

    <bean id="oracleLobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true">  
      <property name="nativeJdbcExtractor">  
       <ref local="nativeJdbcExtractor" />  
     </property>  
 </bean>
 
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
...
<property name="lobHandler">  
      <ref local="oracleLobHandler" />  
 </property>
</bean>

  这样,Spring对Clob的Handler就加入了。现在尚缺明确对什么处理了。那么我们需要改变Clob对应的hibernate类型
<property   name="content"   type="org.springframework.orm.hibernate3.support.ClobStringType"  update="true" insert="true"         column="CONTENT" />

 对应的实体类:
public class News  {
  private String content;  
  ...
}

一切就这么简单,让我们忘掉Clob吧。以上各类是在Spring 2.0和Hibernate3.0的配置,如果是其他版本请查找对应的类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值