使用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

相关文章

Qt之QMessageBox的具体使用

《Qt之QMessageBox的具体使用》本文介绍Qt中QMessageBox类的使用,用于弹出提示、警告、错误等模态对话框,具有一定的参考价值,感兴趣的可以了解一下... 目录1.引言2.简单介绍3.常见函数4.按钮类型(QMessage::StandardButton)5.分步骤实现弹窗6.总结1.引言

Python使用Reflex构建现代Web应用的完全指南

《Python使用Reflex构建现代Web应用的完全指南》这篇文章为大家深入介绍了Reflex框架的设计理念,技术特性,项目结构,核心API,实际开发流程以及与其他框架的对比和部署建议,感兴趣的小伙... 目录什么是 ReFlex?为什么选择 Reflex?安装与环境配置构建你的第一个应用核心概念解析组件

Qt中Qfile类的使用

《Qt中Qfile类的使用》很多应用程序都具备操作文件的能力,包括对文件进行写入和读取,创建和删除文件,本文主要介绍了Qt中Qfile类的使用,具有一定的参考价值,感兴趣的可以了解一下... 目录1.引言2.QFile文件操作3.演示示例3.1实验一3.2实验二【演示 QFile 读写二进制文件的过程】4.

spring security 超详细使用教程及如何接入springboot、前后端分离

《springsecurity超详细使用教程及如何接入springboot、前后端分离》SpringSecurity是一个强大且可扩展的框架,用于保护Java应用程序,尤其是基于Spring的应用... 目录1、准备工作1.1 引入依赖1.2 用户认证的配置1.3 基本的配置1.4 常用配置2、加密1. 密

WinForms中主要控件的详细使用教程

《WinForms中主要控件的详细使用教程》WinForms(WindowsForms)是Microsoft提供的用于构建Windows桌面应用程序的框架,它提供了丰富的控件集合,可以满足各种UI设计... 目录一、基础控件1. Button (按钮)2. Label (标签)3. TextBox (文本框

Python对PDF书签进行添加,修改提取和删除操作

《Python对PDF书签进行添加,修改提取和删除操作》PDF书签是PDF文件中的导航工具,通常包含一个标题和一个跳转位置,本教程将详细介绍如何使用Python对PDF文件中的书签进行操作... 目录简介使用工具python 向 PDF 添加书签添加书签添加嵌套书签Python 修改 PDF 书签Pytho

使用Vue-ECharts实现数据可视化图表功能

《使用Vue-ECharts实现数据可视化图表功能》在前端开发中,经常会遇到需要展示数据可视化的需求,比如柱状图、折线图、饼图等,这类需求不仅要求我们准确地将数据呈现出来,还需要兼顾美观与交互体验,所... 目录前言为什么选择 vue-ECharts?1. 基于 ECharts,功能强大2. 更符合 Vue

如何合理使用Spring的事务方式

《如何合理使用Spring的事务方式》:本文主要介绍如何合理使用Spring的事务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、底层构造1.1.事务管理器1.2.事务定义信息1.3.事务状态1.4.联系1.2、特点1.3、原理2. Sprin

Vue中插槽slot的使用示例详解

《Vue中插槽slot的使用示例详解》:本文主要介绍Vue中插槽slot的使用示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、插槽是什么二、插槽分类2.1 匿名插槽2.2 具名插槽2.3 作用域插槽三、插槽的基本使用3.1 匿名插槽

使用WPF实现窗口抖动动画效果

《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后