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

2023-11-20 20:18

本文主要是介绍使用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找出相应的实体删掉就行。

这篇关于使用Hibernate3来操作Clob字段的插入,修改,读取的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/397169

相关文章

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Python ZIP文件操作技巧详解

《PythonZIP文件操作技巧详解》在数据处理和系统开发中,ZIP文件操作是开发者必须掌握的核心技能,Python标准库提供的zipfile模块以简洁的API和跨平台特性,成为处理ZIP文件的首选... 目录一、ZIP文件操作基础三板斧1.1 创建压缩包1.2 解压操作1.3 文件遍历与信息获取二、进阶技

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二

Java中字符串转时间与时间转字符串的操作详解

《Java中字符串转时间与时间转字符串的操作详解》Java的java.time包提供了强大的日期和时间处理功能,通过DateTimeFormatter可以轻松地在日期时间对象和字符串之间进行转换,下面... 目录一、字符串转时间(一)使用预定义格式(二)自定义格式二、时间转字符串(一)使用预定义格式(二)自

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB

Maven的使用和配置国内源的保姆级教程

《Maven的使用和配置国内源的保姆级教程》Maven是⼀个项目管理工具,基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告... 目录1. 什么是Maven?2.创建⼀个Maven项目3.Maven 核心功能4.使用Maven H