`
wushanlang
  • 浏览: 45338 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用Hibernate3来操作Clob字段的插入,修改,读取

阅读更多

1.实体类 1
2.映射文件 2
3.实体Form 3
4.Hibernate的Helper 3
5.Clob的插入 5
6.Clob的修改 5
7.Clob的读取 6
8.Clob的删除 6


项目中遇到要对Oralce数据库的CLOB字段进行处理的问题,即实现对CLOB值的插入,更新,查询。 Clob的的操作一般有三种方法:1。JDBC的方法。2:把clob当作String来处理。3.直接使用Clob。这里我介绍的是第三种方法。使用 Hibernate3 来管理数据库的连接session。

1.实体类
Entity实休类PublicInfo.Java结构如下,contentString为辅助字段,不映射到数据库中,这里注意的是映射到hbm.xml中的content字段的属性设type=”clob”就行了。

import java.io.Serializable;
import java.sql.Clob;
import java.util.Date;
/**
* @author ZhangWenRui
* @hibernate.class
*/
public class PublicInfo implements Serializable{
private Long id;
   private String contentString;
   private Clob content;//内容
/**
     * @hibernate.id generator-class = "sequence" length = "16"
     * @hibernate.generator-param name="sequence" value="seq_information"
     * @return
     */
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
/**
     * @hibernate.property type="clob"
     * @return
     */
public Clob getContent() {
   return content;
}
public void setContent(Clob content) {
   this.content = content;
}
public String getContentString() {
   return contentString;
}
}
2.映射文件
PublicInfo.hbm.xml映射文件如下:
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class
        name="com.eclink.publicinfo.entity.PublicInfo"
        table="publicInfo"
    >
        <id
            name="id"
            column="id"
            type="java.lang.Long"
            length="16"
        >
            <generator class="sequence">
                <param name="sequence">seq_information</param>
            </generator>
        </id>
        <property
            name="content"
            type="clob"
            update="true"
            insert="true"
            column="content"
        />
    </class>
</hibernate-mapping>
3.实体Form

import org.apache.struts.validator.ValidatorForm;

/**
* @struts.form name="publicInfoForm" include-all = "true"
* @author ZhangWenRui
*
*/
public class PublicInfoForm extends ValidatorForm{
private String contentString;
public String getContentString() {
   return contentString;
}
public void setContentString(String contentString) {
   this.contentString = contentString;
}
}

4.Hibernate的Helper
hibernate.cfg.xml放置于/WEB-INF/hibernate.cfg.xml下。
HibernateUtils用于管理Hibernate的sessionfactory.
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* @author ZhangWenRui
*/

public class HibernateUtils {
private static SessionFactory sessionFactory;
static Configuration configuration = new Configuration().configure("../hibernate.cfg.xml");
static{
   try {
    sessionFactory = configuration.buildSessionFactory();
   } catch (Throwable e) {
    System.out.println("create sessionFactory failed!");
   }
}
public static SessionFactory getSessionFactory(){
   return sessionFactory;
}
public static void initialize(Object proxy) {
   if (proxy != null){  
   try {
    Hibernate.initialize(proxy);
   } catch (HibernateException e) {
    throw new RuntimeException("Can't initialize hibernate proxy", e);
   }
   }
}
}
hibernate.cfg.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
   <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
   <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
   <property name="hibernate.connection.url">jdbc:oracle:thin:@192.168.0.2:1521:info</property>
   <property name="hibernate.connection.username">info</property>
   <property name="hibernate.connection.password">info</property>
   <property name="hibernate.connection.pool_size">10</property>
   <property name="show_sql">true</property>
   <property name="use_outer_join">true</property>
   <property name="hibernate.jdbc.batch_size">20</property>
  
   <mapping resource="com/publicinfo/entity/PublicInfo.hbm.xml" />
</session-factory>
</hibernate-configuration>

5.Clob的插入

public void addPublicInfo(PublicInfo publicInfo) throws SQLException, IOException {
   org.hibernate.Session session = HibernateUtils.getSessionFactory().openSession();//建立一个session
   Transaction tx = session.beginTransaction();//事务
   publicInfo.setContent(Hibernate.createClob(" "));//插入空的clob值
   session.save(publicInfo);
   session.flush();
   session.refresh(publicInfo, LockMode.UPGRADE);//锁定
   org.hibernate.lob.SerializableClob cb = (org.hibernate.lob.SerializableClob) publicInfo.getContent();
   java.sql.Clob wrapClob = (java.sql.Clob) cb.getWrappedClob();
   if(wrapClob instanceof oracle.sql.CLOB){
    oracle.sql.CLOB clob = (oracle.sql.CLOB) wrapClob;
    java.io.Writer writer = clob.getCharacterOutputStream();
    String contentStr = publicInfo.getContentString();
    writer.write(contentStr);
    writer.close();
   }
   tx.commit();
   session.close();
}

 

6.Clob的修改
public void updatePublicInfo(PublicInfo publicInfo) throws SQLException, IOException {
   Session session = HibernateUtils.getSessionFactory().openSession();
   Transaction tx = session.beginTransaction();
   publicInfo.setContent(Hibernate.createClob(" "));
   session.saveOrUpdate(publicInfo);
   session.flush();
   session.refresh(publicInfo, LockMode.UPGRADE);
   SerializableClob cb = (SerializableClob) publicInfo.getContent();
   Clob wrapClob = (Clob) cb.getWrappedClob();
   if(wrapClob instanceof CLOB){
    CLOB clob = (CLOB) wrapClob;
    Writer writer = clob.getCharacterOutputStream();
    String contentStr = publicInfo.getContentString();
    writer.write(contentStr);
    writer.close();
   }
   tx.commit();
   session.close();
}

7.Clob的读取

Clob clob = publicInfo.getContent();
   String contentStr = "";
   if(clob != null)
    contentStr = clob.getSubString(1, (int)clob.length());

8.Clob的删除
由于删除操作不需要对Clob类型作特殊处理,只要通过id找出相应的实体删掉就行。

分享到:
评论

相关推荐

    spring+hibernate操作oracle的clob字段

    Spring和Hibernate框架结合使用可以有效地进行CLOB字段的操作。以下是实现这一功能的关键步骤和注意事项: 1. **配置SessionFactory** 在Spring配置文件中,你需要创建一个`SessionFactory` bean,同时指定一个`...

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

    - 在Hibernate的实体类中,我们需要为Clob和Blob字段定义对应的属性,并使用`@Lob`注解来标记它们。例如: ```java @Lob private Clob largeText; @Lob private Blob binaryData; ``` - 对于Clob,可以使用`...

    Hibernate对Blob,Clob的操作

    本文将详细介绍如何在Hibernate中操作Blob和Clob字段,实现数据的存储与读取。 首先,我们需要在Hibernate映射文件(.hbm.xml)中定义Blob和Clob字段。对于Blob,可以这样声明: ```xml ``` 这里的`name`属性...

    Hibernate对BLOB CLOB操作

    同时,Hibernate的实体映射文件(例如`Users.hbm.xml`)用于定义实体类与数据库表之间的映射关系,其中包括了如何处理BLOB和CLOB字段。 以`Users.hbm.xml`为例,假设我们有一个`Users`实体类,其中有一个`...

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

    对于大数据量的Clob字段,推荐直接使用Clob类型进行操作。在实体类中定义Clob类型的属性,并在Hibernate映射文件中相应配置。这样可以避免一次性加载整个Clob内容到内存,从而降低内存消耗。 4.1 基本配置: 4.1.1 ...

    hibernate保存blob,clob对象

    此外,对于频繁读取的CLOB字段,可以考虑将其索引或部分内容缓存。 最后,虽然Hibernate提供了便捷的接口,但在处理BLOB和CLOB时,还需要了解所用数据库的特性,因为不同的数据库可能有不同的限制和最佳实践。例如...

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

    在保存或更新带有Clob和Blob字段的实体时,Hibernate会自动处理这些数据的插入和更新操作。例如,当你调用`session.saveOrUpdate(entity)`或`entityManager.persist(entity)`时,Hibernate会将Clob和Blob的内容正确...

    hibernate存取oracle的clob

    下面我们将详细介绍如何使用 Hibernate 来存取 Oracle 的 CLOB 数据。 #### 1. 理解 CLOB 在 Oracle 中,CLOB 用于存储大量的文本数据,如文章、文档等。CLOB 支持 Unicode 字符集,因此非常适合用来存储多语言...

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

    在Hibernate的XML映射文件中,你需要为这个Clob字段指定映射规则,例如: ```xml &lt;property name="summaryClob" type="org.hibernate.type.ClobType"&gt; &lt;column name="SUMMARY_CLOB" /&gt; ``` **CRUD操作**: ...

    hibernate动态映射表处理oracle的clob类型

    本主题“hibernate动态映射表处理Oracle的CLOB类型”主要聚焦于如何在Hibernate中有效地管理和操作CLOB字段。在Oracle 10g中,CLOB数据类型的处理有时会遇到一些挑战,尤其是在与ORM框架结合使用时。以下将详细介绍...

    使用hibernate对oracle读取blob

    当需要从数据库读取Blob时,可以使用Hibernate的`Session`对象来获取实体,Blob内容会被自动读取: ```java MediaEntity media = session.get(MediaEntity.class, id); InputStream blobInputStream = media....

    Hibernate操作数据库大字段的示例(附源码及详细开发使用方法)。

    // 对应数据库中的CLOB字段 // getters and setters } ``` `@Lob`注解表明`content`字段是大字段类型,Hibernate会自动处理它的存储和读取。 **三、持久化操作** 1. **保存/更新大字段**:在保存或更新实体时...

    Spring+Hibernate处理Oracle lob字段(一)

    对于CLOB字段,可以使用`StringWriter`和`Reader`来处理文本内容: ```java StringWriter writer = new StringWriter(); writer.write("Your text content here..."); myEntity.setDescription(writer.toString());...

    关于Clob类型在Hibernate中 的应用小结-- 一篇使用心得.zip

    3. **插入与更新**:当向数据库中插入或更新包含Clob字段的记录时,Hibernate会自动处理这些数据。可以使用`session.save()`或`session.update()`方法,但在实际使用中,我们通常需要使用`session.merge()`,因为它...

    Blob和Clob使用例子

    在查询和更新Blob和Clob字段时,我们可以使用`getBlob()`和`getClob()`方法获取数据,然后进行读取或修改。注意,处理完Blob和Clob数据后,记得关闭相关的流资源以避免内存泄漏。 总结来说,Blob和Clob是数据库中...

    spring1.2+hibernate3对大字段的处理实例,供大家学习与交流,可直接运行

    其次,Hibernate 3是一个流行的Java持久化框架,它将对象关系映射(Object-Relational Mapping, ORM)技术应用于数据库操作,使得开发人员可以使用面向对象的方式来操作数据库。在处理大字段时,Hibernate提供了Blob...

    java中(注解符)处理Clob(blob)类型

    在 Java 中,处理 Clob 和 Blob 类型需要使用特殊的注解配置来确保正确地读取和写入数据。 一、Clob 类型的注解配置 在 Java 中,处理 Clob 类型需要使用 @Lob 注解来指定该字段为大规模字符数据类型。@Lob 注解...

Global site tag (gtag.js) - Google Analytics