`
魔力猫咪
  • 浏览: 105796 次
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate 中Clob字段的使用

阅读更多

数据库的大字段操作向来属于数据库操作中最麻烦的部分。以前在Java开发中,无论是使用JDBC还是使用Hibernate这样的持久化映射工具。大字段操作的代码都是又丑又长,散发出一种“坏味道”。

我们在网上搜索一下,能找到的代码大多非常复杂。其实,随着厂商的不断努力,对于大字段的操作已经越来越容易了。比如SQL Server 2005中推出了新的大字段类型,可以向操作varchar等普通字段类型一样操作大字段。Oracle也推出了支持以String的方式处理Clob的新驱动程序(仅限10g及其以上版本,不过听说9i也可以使用10g的驱动实现这个功能)。

Java开发中,持久化工具首选Hibernate。但是网上和参考书上的Hibernate操作大字段例子要么是古老的1.x版本的,在新版本下已经无法执行了。要么是自己写自定义类型,晕呼呼的没几个人看得明白。其实,配合各家厂商推出的新特性,Hibernate可以很容易的操作Clob字段了。

猫咪最近需要在数据库中插入一个Clob的字段。看了一些网上的零星例子,试验成功使用String直接映射Clob。不用去转换Clob开流,也不用写Hibernate自定义类型,更不用必须和Spring耦合,使用Spring的专用Hibernate支持。

下面是猫咪的代码(Oracle例子):

首先在数据库里建立一个表

sql 代码
  1. create table textclob (tid number(38,0),name varchar2(100),text clob)   
  2.   

然后建立对应的Java类

java 代码
  1. public class textclob {   
  2.   
  3.   private int id;   
  4.   
  5.   private String name;   
  6.   
  7.   private String text;   
  8.   
  9.   //set和get方法略...   
  10.   
  11. }   
  12.   
然后写Hibernate配置文件和映射文件。

Hibernate的配置文件没有什么特别的,Oracle10g数据库需要添加一个专有属性,同时要保证JDBC驱动一定是网上最新的(支持1.4及以上版本且是最新发布的)。SQL Server数据库的配置不则需要做任何修改,驱动方面2000推荐使用jtds驱动,不推荐Microsoft自己的(微软SQL Server 2000的JDBC驱动太烂了)。2005推荐jtds和Microsoft驱动。

配置文件如下:
        
   

xml 代码

 

  1. <hibernate-configuration>  
  2.     <session-factory name="SessionFactory">  
  3.         <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriverproperty>  
  4.         <property name="hibernate.connection.password">********property>  
  5.         <property name="hibernate.connection.SetBigStringTryClob">trueproperty>  
  6.         <property name="hibernate.connection.url">jdbc:oracle:thin:@***.***.***.**:1521:orclproperty>  
  7.         <property name="hibernate.connection.username">********property>  
  8.         <property name="hibernate.dialect">org.hibernate.dialect.Oracle9Dialectproperty>  
  9.         <property name="hibernate.show_sql">trueproperty>  
  10.         <property name="hibernate.connection.pool_size">10property>  
  11.         <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProviderproperty>  
  12.         <property name="hibernate.c3p0.min_size">1property>  
  13.         <property name="hibernate.c3p0.max_size">5property>  
  14.         <property name="hibernate.c3p0.timeout">2500property>  
  15.         <property name="hibernate.c3p0.max_statements">50property>  
  16.         <mapping resource="org/Miao/Domains/Clob.hbm.xml" />  
  17.     session-factory>  
  18. hibernate-configuration>  

 

注意配置文件中"hibernate.connection.SetBigStringTryClob"部分。这是Oracle必须添加的属性。其它配置没有什么特别的。SQL Server不需要这个属性。同时配置文件配置了一个C3P0数据库连接池。

 

映射文件如下:

   

xml 代码
  1. <hibernate-mapping package="org.Miao.Domains">  
  2.         <class name="Clob" table="clobs">  
  3.           <id name="id" column="cid">  
  4.             <generator class="assigned">generator>  
  5.           id>  
  6.           <property name="name">property>  
  7.           <property name="text" type="text" column="itext">property>  
  8.         class>  
  9.     hibernate-mapping>  

然后就可以测试一下了。写一个运行的测试类Run.class。

java 代码
  1. package org.Miao;   
  2.   
  3. import org.Miao.Domains.Clob;   
  4. import org.hibernate.HibernateException;   
  5. import org.hibernate.Session;   
  6. import org.hibernate.SessionFactory;   
  7. import org.hibernate.Transaction;   
  8. import org.hibernate.cfg.Configuration;   
  9.   
  10. public class Run {   
  11.   
  12.  /**  
  13.   * @param args  
  14.   */  
  15.  public static void main(String[] args) {   
  16.   // 启动Hibernate   
  17.   
  18.   Configuration cfg = new Configuration();   
  19.   cfg.configure();   
  20.   SessionFactory sf = cfg.buildSessionFactory();   
  21.   
  22.   //得到Session,向数据库中插入一条数据   
  23.   Session session = sf.openSession();   
  24.   Transaction transaction = session.beginTransaction();   
  25.   try {   
  26.    Clob clob = new Clob();   
  27.    clob.setId(50);   
  28.    clob.setName("test");   
  29.    StringBuffer sb = new StringBuffer();   
  30.   
  31. //将主席的诗累加1万次,诗中字加标点共64个。累加1万次就是64万字。   
  32.    for(int i=0;i<10000;i++){   
  33.     sb.append("钟山风雨起苍黄,百万雄师过大江。虎踞龙盘今胜昔,天翻地覆慨而慷。宜将剩勇追穷寇,不可沽名学霸王。天若有情天亦老,人间正道是沧桑。");   
  34.    }   
  35.    clob.setText(sb.toString());   
  36.    session.save(clob);   
  37.    transaction.commit();   
  38.   } catch (HibernateException e) {   
  39.    transaction.rollback();   
  40.    e.printStackTrace();   
  41.   } finally {   
  42.    session.close();   
  43.   }   
  44.  }   
  45.   
  46. }  

现在去数据库里看一下,表里已经新加了一条记录,其中其Clob字段中有64万字。如果换成SQL Server数据库,只需要更改一下配置文件就可以了,映射文件和代码一个字也不用改。不过使用SQL Server的话,最好使用2005,2005支持varchar(max)类型,比text和ntext类型好用得多。

分享到:
评论

相关推荐

    Hibernate存储Clob字段的方式总结

    介绍了利用Hibernate将一个长字符串转换为流存储至Clob字段中,然后再从Clob字段中读出来,转换为字符串输出的方式

    spring+hibernate 解决大字段(clob)

    是我自己验证过的 用的是oracle10数据库 文件里面有具体的配置。

    hibernate Blob、Clob字段的映射的例子

    hibernate Blob、Clob字段的映射的例子.数据库mysql,数据库放在文件夹里面,例子的说明文章在我的csdn blog: http://blog.csdn.net/zhengcandan

    spring+hibernate操作oracle的clob字段

    J2EE开发中,经常会遇到存储大文本的文字信息,而oracle数据库的vachar字段最大能存储4000个字节,存储更大的信息必须使用clob或blob字段,本文档就是针对j2ee开发中对colb字段操作的实现。

    关于在Hibernate中对于Clob,Blob字段的处理方法

    oracle的jdbc驱动程序,用这个版本的操作Clob,blob类型的数据很方便。 博文链接:https://zhenjw.iteye.com/blog/173419

    Hibernate对Blob,Clob的操作

    使用Hibernate映射Blob,Clob字段,并对这些字段完成存,取功能

    Hibernate对BLOB CLOB操作

    NULL 博文链接:https://ylsuccess.iteye.com/blog/411005

    解析使用jdbc,hibernate处理clob/blob字段的详解

    本篇是对使用jdbc,hibernate处理clob/blob字段进行了详细的分析介绍,需要的朋友参考下

    Hibernate操作Oarcle中Clob、Blob字段小结

    NULL 博文链接:https://sjsky.iteye.com/blog/1154916

    spring+hbernate对clob、blob字段的处理

    一个完整的工程,主要功能为:spring+hbernate对clob、blob字段的处理 包括:数据脚本、典型的SSH框架处理,以及spring、hibernate数据批量保存等功能源码、所用到的lib包 数据环境为:oracle 10G 开发:Mycelipse5.1...

    关于Oracle的 Clob数据类型在Hibernate中的应用小结

    关于Oracle的 Clob数据类型在Hibernate中的应用小结

    关于Clob类型在Hibernate中 的应用小结.rar

    通常,要解决超过4000字节的数据,一种做法是将数据写入文件,xml或plain file都可以,数据...另一个做法是使用clob, blob等字段类型,主要有:采用传统的jbdc方式、把clob以string方式处理、直接使用clob类型三种方案

    ssh(structs,spring,hibernate)框架中的上传下载

    3在Spring中使用org.springframework.jdbc.support.lob.OracleLobHandler处理Oracle数据库的Blob类型字段。  通过这样的设置和配置,我们就可以象持久化表的一般字段类型一样处理Blob字段了。  以上是Spring+...

    Hibernate注释大全收藏

    version属性映射到 "OPTLOCK" 列,entity manager 使用这个字段来检测冲突。 一般可以用 数字 或者 timestamp 类型来支持 version. 实体Bean中所有非static 非 transient 属性都可以被持久化,除非用@Transient注解...

    Spring中文帮助文档

    在应用服务器中使用Hibernate的注意事项 12.3. JDO 12.3.1. 建立PersistenceManagerFactory 12.3.2. JdoTemplate和JdoDaoSupport 12.3.3. 基于原生的JDO API实现DAO 12.3.4. 事务管理 12.3.5. JdoDialect ...

    Spring API

    在应用服务器中使用Hibernate的注意事项 12.3. JDO 12.3.1. 建立PersistenceManagerFactory 12.3.2. JdoTemplate和JdoDaoSupport 12.3.3. 基于原生的JDO API实现DAO 12.3.4. 事务管理 12.3.5. JdoDialect ...

    DBKING使用指南

    在dbking中,所有的数据库数据只有五种数据类型,String、Number(BigDecimal)、Timestamp、Clob(String)、Blob(byte[]),经过反复测试后,我们会例出各种数据库数据类型到这五种类型的映射表,当然我们也有...

Global site tag (gtag.js) - Google Analytics