首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

java clob 处置大字段-详细

2012-11-01 
java clob 处理大字段-详细string clob //处理 大字段 CLOB eventEvents.setEventContent(Hibernate.c

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.ClobCLOB clob = (CLOB) wrapclob;// 这里的CLOB是oracle.sql.CLOBWriter 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",eventContent);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 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");}}

热点排行