SSH对Clob字段类型的支持

SSH环境下Clob字段处理
本文介绍在SSH(Struts+Spring+Hibernate)框架下如何处理Oracle数据库中的Clob字段,包括配置步骤、实体类定义及映射文件设置等关键信息。

SSH对Clob字段类型的支持

环境:

1、Oracle 9i 9.2.0.8.0

2、jdbc:ojdbc5.jar

3、Spring 2

4、Hibernate 3

 

系统中有个信息管理模块,其中的信息内容使用了FCKeditor进行编辑,内容可能会很长,因此决定将该字段类型由varchar2改为clob。

 

在网上查资料,据说Oracle 10g和1.4及以上版本的JDBC已经支持使用String直接映射Clob,配置如下:

  • Hibernate的JDBC配置

 

ExpandedBlockStart.gif Code
<property name="hibernate.connection.SetBigStringTryClob">true</property>

 

  • Hibernate映射文件

 

ExpandedBlockStart.gif Code
<property name="clobContent" type="text" column="V_CONTENT"></property>

 

  • 实体类

 

ExpandedBlockStart.gif Code
private String clobContent; 

 

详见:Hibernate 中Clob字段的使用

 

可惜我们的环境并不支持这种简单的配置,经多番查找资料和试验,我采用了Spring的支持方式,配置如下:

  • Spring 配置文件

 

ExpandedBlockStart.gif Code
<!-- 对数据库Blob字段和Clob字段的支持 -->
<bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor" lazy-init="true">
</bean>   
<bean id="lobHandler" 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="dataSource" ref="app_ds"/> 

    
<!-- 对数据库Blob字段和Clob字段的支持 -->
    
<property name="lobHandler">   
        
<ref local="lobHandler"/>   
    
</property>

 

  • Hibernate映射文件

 

ExpandedBlockStart.gif Code
<property name="clobContent" type="org.springframework.orm.hibernate3.support.ClobStringType" column="V_CONTENT"></property>

 

  • 实体类

 

ExpandedBlockStart.gif Code
private String clobContent;

 

 PS:如果是用的注解来映射的话

  

/**    
     * nr:(内容)      
     * @since Ver 1.1    
     */ 
    @Lob 
    @Basic(fetch = FetchType.LAZY) 
    @Column(name="nr", columnDefinition="CLOB", nullable=true)
    @Comment("内容")
    private String nr;

这样配置后,即可正常运行,不需改动代码。

 

附:

1、JDBC版本很重要。最初我们的lib下扔了两个驱动classes12.jar和ojdbc5.jar,一直是classes12.jar在起作用,结果调试时读取数据没有问题,但写入数据时报“无法从套接字读取更多的数据”的错误,删除这个包后运行正常。

点击查看classes12.jar和ojdbc的不同

2、varchar2转clob的SQL

 

ExpandedBlockStart.gif Code
ALTER TABLE tb_base_notify
ADD (v_content1 CLOB); 

UPDATE tb_base_notify
SET v_content1=v_content; 

ALTER TABLE tb_base_notify DROP COLUMN v_content; 

ALTER TABLE tb_base_notify
RENAME 
COLUMN v_content1 TO v_content;

转载于:https://my.oschina.net/i33/blog/40725

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值