使用Hibernate+Oracle9i R2 处理Clob大文本数据

本文主要讨论直接写入Clob类型的字段

应用环境:Hibernate 2.1.3+Oracle 9i R2+Oracle 10g的ojdbc1.4

本人在做一个项目时碰到了将SQL Server 2000移植到Oracle 9i中,在SQL Server 2000种有个表,其中有个text类型的字段用来存储大文本,而在Oracle中有相应的Clob类型的字段来处理大文本。为了少量的更改代码,甚至不更改代码来达到移植的目的,本人尝试了多种方法,现总结出来希望能给碰到同样问题的同行提供参考。

在直接将大文本写入Clob类型的字段时,在Hibernate的映射文件OracleLob.hbm.xml中的映射:

<property name="content" type="text" column="tclob" />

在相应的pojo中:

在相应的pojo中:

在相应的pojo中:

package mytest.pojo;

public class OracleLob {
    .................

    private String clob;
    .................

    public String getClob() {
        return clob;
    }

    public void setClob(String clob) {
        this.clob = clob;
    }

}

写入数据库:

....................

OracleLob lob = new OracleLob();

lob.setContent(content); //content是大文本字符串

....................

session.save(lob);

...................

本人在兼顾两个数据库之间的移植时,只改映射文件而没有改动一行代码。

在OracleLob.hbm.xml文件中做pojo与数据库字段之间的映射关系时必须将type类型设定为Hibernate的text类型,我曾试过将type类型设为java.lang.String,测试证明只能存储小于32k的字符,超过32k抛出"java.sql.SQLException: setString 只能处理少于 32766 个字符的字符串"异常,而设为text类型则没有限制。

另外,使用Oracle9i版本的jdbc驱动也会出现字符限制的问题。

在Oracle10g的jdbc驱动下测试通过。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值