`
chengyu2099
  • 浏览: 471395 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java clob 处理大字段-详细

阅读更多
string ==> clob 

//处理 大字段 CLOB 
			eventEvents.setEventContent(Hibernate.createClob(" "));
			
			eventRepository.addEvent(eventEvents);
			
			/* 处理clob字段 */
			SerializableClob sc = 
			(SerializableClob)eventEvents.getEventContent();//
			Clob wrapclob = sc.getWrappedClob();// 这里的Clob是java.sql.Clob
			CLOB clob = (CLOB) wrapclob;// 这里的CLOB是oracle.sql.CLOB
			Writer writer = clob.getCharacterOutputStream();
			writer.write(eventVO.getEventContent());// 
			kybasicInfo.getInfoContentToString()是String类型的,在action里就是
			传这个进来,然后再通过文件流形式写成CLOB字段中
			writer.close();

clob ==> string 
//		处理大字段
		try {
			Clob clob=event.getEventContent();
			evo.setEventContent(IOUtils.toString(clob.getCharacterStream()));
			String eventContent = 
			IOUtils.toString(clob.getCharacterStream());
			ServletActionContext.getRequest().setAttribute("eventContent",eve
			ntContent);
			System.out.println("CLOB = "+clob.getCharacterStream());

public void modifyEvent(EventEvents event) throws DAOException {
		
		this.update(event);
		this.getMyHibernateTemplate().flush();
		this.getMyHibernateTemplate().refresh(event);
	}


JAVA操作CLOB类型的数据库字段还是有点麻烦,虽然CLOB不像BLOB那样是用二进制来存值,但不能当成普通的String来操作,当初操作ORACLE这种字段类型时,可把我折腾了半天,现将如何操作的步骤写
了个比较详细的例子和说明,以供大家参考.

这里只写最关键的几个地方,其它的地方平时该怎么写就怎么写

首先是POJO类:

import java.sql.Clob;
import java.util.Date;

/**
*
* @author coffee
*
*/

public class KybasicInfo implements java.io.Serializable {

private Long infoId;
private String infoTitle;
private String infoKeyword;
private Clob infoContent; //注意这个地方是java.sql.Clob类型的,生成默认是String类型的,需要手工改一下
private String infoContentToString; //这个是和infoContent做转换时,手工添加的一个,不和数据库里的字段进行对应的
private Long infoTop;
private String userSno;
private Date infoTime;
private Long icId;
private String infoStandby1;
private String infoStandby2;
private String infoStandby3;
private Long infoStandby4;
private Long infoStandby5;
private Long infoStandby6;

public KybasicInfo() {
}

public KybasicInfo(String infoTitle, String infoKeyword,
    Clob infoContent, Long infoTop, String userSno,
    Date infoTime, Long icId, String infoStandby1, String infoStandby2,
    String infoStandby3, Long infoStandby4, Long infoStandby5,
    Long infoStandby6) {
   this.infoTitle = infoTitle;
   this.infoKeyword = infoKeyword;
   this.infoContent = infoContent;
   this.infoTop = infoTop;
   this.userSno = userSno;
   this.infoTime = infoTime;
   this.icId=icId;
   this.infoStandby1 = infoStandby1;
   this.infoStandby2 = infoStandby2;
   this.infoStandby3 = infoStandby3;
   this.infoStandby4 = infoStandby4;
   this.infoStandby5 = infoStandby5;
   this.infoStandby6 = infoStandby6;
}

public Long getInfoId() {
   return this.infoId;
}

public void setInfoId(Long infoId) {
   this.infoId = infoId;
}

public String getInfoTitle() {
   return this.infoTitle;
}

public void setInfoTitle(String infoTitle) {
   this.infoTitle = infoTitle;
}

public String getInfoKeyword() {
   return this.infoKeyword;
}

public void setInfoKeyword(String infoKeyword) {
   this.infoKeyword = infoKeyword;
}

public Clob getInfoContent() {
   return this.infoContent;
}

public void setInfoContent(Clob infoContent) {
   this.infoContent = infoContent;
}

public Long getInfoTop() {
   return this.infoTop;
}

public void setInfoTop(Long infoTop) {
   this.infoTop = infoTop;
}

public Date getInfoTime() {
   return this.infoTime;
}

public void setInfoTime(Date infoTime) {
   this.infoTime = infoTime;
}

public String getInfoStandby1() {
   return this.infoStandby1;
}

public void setInfoStandby1(String infoStandby1) {
   this.infoStandby1 = infoStandby1;
}

public String getInfoStandby2() {
   return this.infoStandby2;
}

public void setInfoStandby2(String infoStandby2) {
   this.infoStandby2 = infoStandby2;
}

public String getInfoStandby3() {
   return this.infoStandby3;
}

public void setInfoStandby3(String infoStandby3) {
   this.infoStandby3 = infoStandby3;
}

public Long getInfoStandby4() {
   return this.infoStandby4;
}

public void setInfoStandby4(Long infoStandby4) {
   this.infoStandby4 = infoStandby4;
}

public Long getInfoStandby5() {
   return this.infoStandby5;
}

public void setInfoStandby5(Long infoStandby5) {
   this.infoStandby5 = infoStandby5;
}

public Long getInfoStandby6() {
   return this.infoStandby6;
}

public void setInfoStandby6(Long infoStandby6) {
   this.infoStandby6 = infoStandby6;
}

public String getUserSno() {
   return userSno;
}

public void setUserSno(String userSno) {
   this.userSno = userSno;
}

public Long getIcId() {
   return icId;
}

public void setIcId(Long icId) {
   this.icId = icId;
}

public String getInfoContentToString() {
   return infoContentToString;
}

public void setInfoContentToString(String infoContentToString) {
   this.infoContentToString = infoContentToString;
}
}

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="kymanage.kybasic.vo.KybasicInfo" table="KYBASIC_INFO" schema="BL">
        <id name="infoId" type="java.lang.Long">
            <column name="INFO_ID" precision="22" scale="0" />
            <generator class="sequence">
            <param name="sequence">INFO_ID</param>
            </generator>
        </id>
        <property name="infoTitle" type="java.lang.String">
            <column name="INFO_TITLE" length="100" />
        </property>
        <property name="infoKeyword" type="java.lang.String">
            <column name="INFO_KEYWORD" length="100" />
        </property>
        <!--注意:这里要将默认生成的String类型改成java.sql.Clob-->
        <property name="infoContent" type="java.sql.Clob">
            <column name="INFO_CONTENT" />
        </property>
        <property name="infoTop" type="java.lang.Long">
            <column name="INFO_TOP" precision="38" scale="0" />
        </property>
        <property name="userSno" type="java.lang.String">
            <column name="USER_SNO" length="100" />
        </property>
        <property name="infoTime" type="java.util.Date">
            <column name="INFO_TIME" length="7" />
        </property>
        <property name="icId" type="java.lang.Long">
            <column name="IC_ID" precision="38" scale="0" />
        </property>
        <property name="infoStandby1" type="java.lang.String">
            <column name="INFO_STANDBY1" length="100" />
        </property>
        <property name="infoStandby2" type="java.lang.String">
            <column name="INFO_STANDBY2" length="100" />
        </property>
        <property name="infoStandby3" type="java.lang.String">
            <column name="INFO_STANDBY3" length="100" />
        </property>
        <property name="infoStandby4" type="java.lang.Long">
            <column name="INFO_STANDBY4" precision="38" scale="0" />
        </property>
        <property name="infoStandby5" type="java.lang.Long">
            <column name="INFO_STANDBY5" precision="22" scale="0" />
        </property>
        <property name="infoStandby6" type="java.lang.Long">
            <column name="INFO_STANDBY6" precision="22" scale="0" />
        </property>
    </class>
</hibernate-mapping>

hibernate DAO类:

import oracle.sql.CLOB;

import java.io.IOException;
import java.io.Writer;
import java.sql.Clob;
import java.sql.SQLException;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Hibernate;
import org.hibernate.LockMode;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.lob.SerializableClob;
import org.springframework.context.ApplicationContext;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

/**
* kybasicInfo
*
* @author coffee
*
*/
public class KybasicInfoDAOImpl extends HibernateDaoSupport {

protected void initDao() {
}
//新增,在action里将表单中的这个大文本按正常情况传过来,也就是传String类型过来,然后,再在DAO里做Clob类型转换,
//这里面可能会有其它层来传参,但最终还是将传过来的Stirng转换成Clob型的,然后通过文件流形式写入到CLOB字段中去
public void save(KybasicInfo kybasicInfo) {
   try {
    Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
    Transaction tran=session.beginTransaction();
    kybasicInfo.setInfoContent(Hibernate.createClob(" "));//注意,这里的参数是个空格,先新增一个空的Clob进去
    session.save(kybasicInfo);
    session.flush();//强制执行
    session.refresh(kybasicInfo,LockMode.UPGRADE);

    SerializableClob sc=(SerializableClob)kybasicInfo.getInfoContent();//kybasicInfo.getInfoContent()是Clob类型的
    Clob wrapclob=sc.getWrappedClob();//这里的Clob是java.sql.Clob
    CLOB clob=(CLOB)wrapclob;//这里的CLOB是oracle.sql.CLOB
    Writer writer=clob.getCharacterOutputStream();
    writer.write(kybasicInfo.getInfoContentToString());//kybasicInfo.getInfoContentToString() 是String类型的,在action里就是传这个进来,然后再通过文件流形式写成CLOB字段中
    writer.close();

    session.save(kybasicInfo);
    tran.commit();
   
   } catch (RuntimeException re) {
    throw re;
   } catch (SQLException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   }
}
//更新,操作的新增是一样的,都是先接收String类型的参数过来,然后再将String的转成CLOB类型的
public void update(KybasicInfo persistentInstance) {
   try {
    Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
    Transaction tran=session.beginTransaction();
    persistentInstance.setInfoContent(Hibernate.createClob(" "));
    session.update(persistentInstance);
    session.flush();
    session.refresh(persistentInstance,LockMode.UPGRADE);
    SerializableClob sc=(SerializableClob)persistentInstance.getInfoContent();
    Clob wrapclob=sc.getWrappedClob();
    CLOB clob=(CLOB)wrapclob;
    Writer writer=clob.getCharacterOutputStream();
    writer.write(persistentInstance.getInfoContentToString());
    writer.close();
    session.update(persistentInstance);
    tran.commit();
   } catch (RuntimeException re) {
    throw re;
   } catch (SQLException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   }
}
//读取Clob字段值
public KybasicInfo findById(java.lang.Long id) {
   try {
    KybasicInfo instance = (KybasicInfo) getHibernateTemplate().get(
      "kymanage.kybasic.vo.KybasicInfo", id);
    Clob clob=instance.getInfoContent();//取得Clob的值
    if(clob!=null){
     String clobString="";
     try {
      clobString = clob.getSubString(1, (int)clob.length());//将Clob类型的值转换成String类型的值
      instance.setInfoContentToString(clobString);//通过setter方法,设置String值,然后就可以通过instance.getInfoContentToString()来取值了
     } catch (SQLException e) {
      e.printStackTrace();
     }
    }
    return instance;
   } catch (RuntimeException re) {
    throw re;
   }
}

public static KybasicInfoDAOImpl getFromApplicationContext(
    ApplicationContext ctx) {
   return (KybasicInfoDAOImpl) ctx.getBean("KybasicInfoDAO");
}
}
分享到:
评论

相关推荐

    Mybatis 处理 CLOB、BLOB 类型数据

    MyBatis 处理 CLOB、BLOB 类型数据是指在使用 MyBatis 框架时,如何正确地处理大字段类型的数据。CLOB(Character Large OBject)和 BLOB(Binary Large OBject)都是大字段类型,用于存储大量的数据。 CLOB 类型...

    数据库读取clob字段

    本文将详细介绍如何在Oracle数据库中读取CLOB类型的字段,并提供一个示例代码片段来展示具体的实现过程。 #### CLOB的基本概念 CLOB是Oracle数据库提供的用于处理大量字符数据的一种特殊数据类型。它支持Unicode...

    hibernate中处理大字段 网上收集的文档

    在Java的持久化框架Hibernate中,处理大数据字段,如文本、图像或者其他大量数据,通常涉及到CLOB(Character Large Object)和BLOB(Binary Large Object)类型。这些类型用于存储数据库中的大文本或二进制数据。...

    Java读取Oracle大字段数据(CLOB)的2种方法

    Java读取Oracle大字段数据(CLOB)有多种方法,本文将详细介绍Java读取Oracle大字段数据(CLOB)的2种方法。 第1种方法:使用Java解析CLOB类型内容 该方法主要通过Java代码来解析CLOB类型内容,实现读取Oracle...

    jdbc 处理clob类型字段

    当我们在处理大型文本数据时,例如XML文档、长篇文章或者大段代码,数据库通常会提供CLOB(Character Large Object)类型来存储这类数据。本主题主要探讨如何使用JDBC有效地操作Oracle数据库中的CLOB类型字段,包括...

    jdbc批量插入大字段

    因此,"jdbc批量插入大字段"这个话题旨在探讨如何高效地通过Java JDBC来实现Blob字段的批量插入,以提高性能。 首先,我们需要了解JDBC(Java Database Connectivity),它是Java编程语言与各种数据库之间通信的...

    ORACLE数据库中插入大字段数据的解决方法

    在实际应用中,需要确保代码正确处理了不同数据库之间的数据类型差异,比如MySQL的TEXT到ORACLE的CLOB,同时考虑到大字段的处理。 总结来说,处理ORACLE数据库中的大字段数据时,应关注存储模式选择、批量操作、...

    oracle数据库的clob大字段在jdbc中的处理方式

    在Java中,当我们需要通过JDBC(Java Database Connectivity)接口与Oracle数据库交互时,处理CLOB字段可能会遇到一些挑战。这篇文档将详细阐述如何在JDBC中有效地读取和操作Oracle数据库的CLOB字段,并将其转换为...

    jsp结合html编辑器FCKeditor对Oracle CLOB大字段操作范例

    在这个示例中,我们将探讨如何使用JSP(JavaServer Pages)与HTML编辑器FCKeditor相结合,来处理Oracle数据库中的CLOB(Character Large Object)类型的大字段。CLOB类型用于存储大量的文本数据,如文章、报告或HTML...

    图片存入Oracle中,用clob和blob两种方式

    - **处理数据**:如果是`CLOB`,则将Base64字符串解码回二进制流;对于`BLOB`,直接使用二进制数据。 - **保存图片**:将二进制流写入文件,生成图片。 5. **使用工具**: 提供的"**ClobAndBlob**"可能是一个...

    Oracle导出Clob,Blob工具

    - 配置导出选项:例如,是否只导出特定记录,如何处理大字段(如是否转存到文件系统),以及导出格式等。 - 执行导出:工具将读取数据库中的大字段数据,根据配置进行处理,并保存到本地或远程位置。 通过这个工具...

    Hibernate存储Clob字段的方式总结

    但随着数据库技术的发展,越来越多的数据库厂商提供了更加简单的方式来操作这些大字段。例如,Oracle数据库提供了支持以String方式处理Clob的新驱动程序。 在Hibernate框架中,可以直接将数据库的Clob字段映射为...

    spring+hibernate 解决大字段(clob)

    ### Spring与Hibernate处理大字段(CLOB/BLOB) 在企业级应用开发中,经常会遇到需要存储大量文本或二进制数据的情况,这时就需要用到数据库的大字段类型如CLOB(Character Large Object)和BLOB(Binary Large ...

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

    总结,本示例通过使用Hibernate的`@Lob`注解展示了如何在Java Web项目中处理数据库的大字段,同时结合Struts框架进行前端控制,提供了完整的源码和数据库脚本,便于开发者理解和实践。对于需要处理大量文本或二进制...

    读写大字段内容到数据库

    这篇博客文章“读写大字段内容到数据库”探讨了如何处理这类数据,特别是在Java环境下。我们将深入讨论相关的知识点。 首先,Blob类型在SQL中用于存储可变长度的非结构化数据。它与Clob(Character Large Object)...

    spring1.2+hibernate2对大字段的处理实例

    总之,处理大字段是Java企业级应用开发中的常见挑战,通过合理的数据模型设计、数据库优化和框架配置,我们可以有效地管理和操作这些大数据。这个"spring1.2+hibernate2对大字段的处理实例"就是一个很好的学习资源,...

    java对oracle大字段读取类

    java对oracle大字段读取类,因项目需求要对大字段进行存取,在网上搜集了些,自己加工了些。用起来很方便!

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

    在处理大字段时,Hibernate提供了Blob和Clob类型的支持,用于存储大对象,如文本、图片等。 针对大字段的处理,通常有以下几种策略: 1. **字段分片**:如果一个字段过大,可以将其拆分为多个较小的字段存储,降低...

    fckeditor配置和oracle大字段类型处理

    本文将详述如何配置FCKeditor与Oracle数据库,特别是针对处理大字段类型(CLOB)的问题。 首先,FCKeditor是一款流行的开源富文本编辑器,它提供了在Web应用程序中创建和编辑HTML内容的功能。用户可以通过其直观的...

    你不知道的JDBC高级应用

    3.特殊类型(date--日期,clob--大字段,blob--二进制) 的操作. 4.元数据(MetaData)的操作:包括 parameter , DB , ResultSet的元数据,配合反射,大幅度提升程序的灵活性. 5.储存过程和CRUD的操作,获得Statement可以添加...

Global site tag (gtag.js) - Google Analytics