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

原创 2006年06月09日 13:47:00

使用Clob数据大体上有三种方法:采用传统的jbdc方式、把clob以string方式处理、直接使用clob类型三种方案

传统的jbdc方式
写入Blob/Clob字段和写入其它类型字段的方式非常不同,因为Blob/Clob自身有一个cursor,必须使用cursor对Blob/Clob进行操作,因而在写入Blob/Clob之前,必须获得cursor才能进行写入,那就需要先插入一个empty的Blob/Clob,这将创建一个Blob/Clob的cursor,然后再把这个empty的Blob/Clob的cursor用select查询出来,这样通过两步操作,就获得了Blob/Clob的cursor,可以真正的写入Blob/Clob数据了。这种方式比较麻烦,读写都要增加不少工作量。
把clob以string方式处理
此方法主要是通过继承net.sf.hibernate.type.ImmutableType类或cirrus.hibernate.UserType类来创建一个新的类如:StringClobType,然后在相应的配置文件里面,把该字段映射为StringClobType类型,即可正常操作。此方法的优点主要体现在具体实现操作的代码较为简单,但在第一步的映射问题上,较难理解。
直接使用clob类型
第三种方法是直接使用clob类型,它主要是在实体中增加一个clobString字段,通过对该字段的读写,在DAOImpl层进行特殊处理后,转换为真正的clob类型,从而实现clob类型字段的CRUD操作
此方法主要优点体现在配置文件的映射类型上,只需要像映射其它基本类型一样,直接写上 type="clob" 就OK了。这对初次遇到这种问题的人来说入门相对容易。由于第二种方法需要额外地创建一个新类型,而且对ImmutableType和UserType类不太了解,因此我推荐采用第三种方法。

具体例子:

package test.test;

import java.sql.SQLException;
import java.util.List;

import net.sf.hibernate.Hibernate;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.Transaction;
import net.sf.hibernate.cfg.Configuration;
import test.bean.Testlob;

public class test {

 public static void main(String[] args) {

  Configuration config = null;
  SessionFactory factory = null;
  Session session = null;

  try {
   config = new Configuration().configure();
   factory = config.buildSessionFactory();
   session = factory.openSession();
   Transaction tx = session.beginTransaction();
   Testlob test = new Testlob();
   //增加
   test.setId(new Integer(2));
   test.setLog(transStr2Clob("测试增加数据"));
   session.save(test);

   //修改
   test = (Testlob) session.get(Testlob.class, new Integer(1));
   test.setLog(transStr2Clob("测试修改数据"));
   session.update(test);
   
   
   //查询
   test = (Testlob) session.get(Testlob.class, new Integer(1));
   System.out.println(transClob2Str(testLob.getLog()));
   }
   
   //复杂查询
   String sql="from Testlob as test where DBMS_LOB.INSTR(test.log,'我',1,1)>0";
   List list = session.find(sql);
   for (int i=0,j=list.size();i<j;i++) {
    Testlob testLob=(Testlob)list.get(i);
    System.out.println(transClob2Str(testLob.getLog()));
   }
   tx.commit();

  } catch (HibernateException e) {
   e.printStackTrace();
  } catch (Exception e) {
   e.printStackTrace();
  } finally {

   try {
    if (session != null)
     session.close();
    if (factory != null)
     factory.close();
   } catch (HibernateException e) {
    e.printStackTrace();
   }
  }

 }
 
 public static String transClob2Str(java.sql.Clob clob) {
  if (clob == null)
   return null;
  String str = "";
  try {
   str = clob.getSubString(1, (int) clob.length());
  } catch (SQLException e) {
   e.printStackTrace();
  }
  return str;

 }

 public static java.sql.Clob transStr2Clob(String str) {
  return Hibernate.createClob(str);
 }

}

Hibernate对与Oracle中Clob类型的使用

Hibernate对与Oracle中Clob类型的使用 一.理解和分析: 1.为何实用Clob:   oracle数据库当需要存入大数据量(大于4000)时,varchar2不够用,可以使...
  • u013120247
  • u013120247
  • 2016年05月31日 09:10
  • 3721

Hibernate的Annotation中实体BLOB、CLOB类型的注解

在Hibernate Annotation中,实体BLOB、CLOB类型的注解与普通的实体属性有些不同,具体操作如下:  BLOB类型的属性声明为byte[]或者java.sql.B...
  • z69183787
  • z69183787
  • 2013年04月03日 10:51
  • 9598

使用Hibernate存取大对象数据类型(clob和blob)

数据库表如下: book表 id 该表的主键。number类型。 photo 代表图书的图片,blob类型。 description 图书的描述,clob类型。 ...
  • zmx729618
  • zmx729618
  • 2016年05月03日 09:15
  • 3340

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

  • 2009年07月31日 09:46
  • 198KB
  • 下载

如何将DB2数据库中的大对象(BLOB,CLOB)数据类型复制到Oracle数据库中

  • 2009年10月27日 16:06
  • 91KB
  • 下载

使用 hibernate 存取大对象数据类型(clob和blob)

数据库表如下: book表 id 该表的主键。number类型。 photo 代表图书的图片,blob类型。 description 图书的描述,clob...
  • liangyixin19800304
  • liangyixin19800304
  • 2013年10月16日 22:54
  • 610

【深入Hibernate】——根据业务自定义Clob数据类型

引言     最近项目涉及到大文本字段Clob,它是大文本中多字节存储数据类型,还有一个与它类似的是Blob,Blob是大文 本单字节存储数据类型。看《深入浅出Hibernate》里看到C...
  • u011626283
  • u011626283
  • 2017年06月18日 09:38
  • 202

关于在Hibernate、Struts2中使用Clob数据类型

关于在Hibernate、Struts2中使用Clob数据类型 情景假设:你需要存储一篇文档,假设文档的属性有四个,分别为:id(作为Hibernate主键)、title(标题)、content(内...
  • VincenLlin
  • VincenLlin
  • 2015年04月14日 11:07
  • 662

hibernate插入CLOB大数据类型

ibernateTemplate对CLOB对象操作,No LobHandler found for configuration... 利用HibernateTemplate对CLOB对象操作 ...
  • kkrgwbj
  • kkrgwbj
  • 2014年08月27日 16:33
  • 739

Mybatis之Oracle增删查改示例(含Date、Clob数据类型操作)

oracle表结构 create table T_USERS ( ID NUMBER not null, NAME VARCHAR2(30), SEX VARCH...
  • bingjie1217
  • bingjie1217
  • 2014年03月12日 14:13
  • 13000
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于Oracle的Clob数据类型在Hibernate中的应用
举报原因:
原因补充:

(最多只允许输入30个字)