Hibernate对与Oracle中Clob类型的使用

转载 2016年05月31日 09:10:26
Hibernate对与Oracle中Clob类型的使用

一.理解和分析:
1.为何实用Clob:  
oracle数据库当需要存入大数据量(大于4000)时,varchar2不够用,可以使用clob,本文描述clob怎么和Hibernate一起使用。

2.Clob类型的属性的赋值方式——   String转Clob

String content = request.getParameter("content");//1.从request请求中取值(String类型的)
Clob clob = Hibernate.createClob(content);//2.通过hibernate将string转化为clob
news.setContent(clob);//3.给实体类对应属性赋值

3.Clob类型的属性的取值方式——   Clob转String

List<News> list = query.addEntity(News.class).list();//1.从数据库取值
News news = (News)list.get(0);//2.取News对象
String content = ClobUtil.ClobToString(news.getContent());//3.将news对象中的clob类型的content转化为String字符串

二.实例分析:
1.建表:News新闻表  

2.创建实体类和映射文件:

public class News {
	private Long id;
	private String dir;
	private String fileName;
	private String title;
	private String tag;
	private String imgUrl;
	private Integer type;
	private String creator;
	private Date createDate;
	private String remark;
	private Integer ishot;
	private Clob content;
	......
}

      

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2014-11-28 9:58:10 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
    <class name="com.datanew.czfc.frontPage.entity.News" table="NEWS">
        <id name="id" column="ID">
        	<generator class="sequence">
                <param name="sequence">SQ_NEWS</param>
        	</generator>
        </id>
        <property name="dir" type="java.lang.String">
            <column name="DIR" />
        </property>
        <property name="fileName" type="java.lang.String">
            <column name="FILE_NAME" />
        </property>
        <property name="title" type="java.lang.String">
            <column name="TITLE" />
        </property>
        <property name="tag" type="java.lang.String">
            <column name="TAG" />
        </property>
        <property name="imgUrl" type="java.lang.String">
            <column name="IMG_URL" />
        </property>
        <property name="type" type="java.lang.Integer">
            <column name="TYPE" />
        </property>
        <property name="creator" type="java.lang.String">
            <column name="CREATOR" />
        </property>
        <property name="createDate" type="java.util.Date">
            <column name="CREATE_DATE" />
        </property>
        <property name="remark" type="java.lang.String">
            <column name="REMARK" />
        </property>
         <property name="ishot" type="java.lang.Integer">
            <column name="ISHOT" />
        </property>
        <property name="content" type="java.sql.Clob">
            <column name="CONTENT" />
        </property>
    </class>
</hibernate-mapping>

      

3.增加News的Servlet::—— 需要对String数据转化成Clob数据

String title = request.getParameter("title");
String tag = request.getParameter("tag");
String content = request.getParameter("content");
String typeStr = request.getParameter("type");
String ishotStr = request.getParameter("ishot");
int type = Integer.valueOf(typeStr);
int ishot = 0;
if("on".equals(ishotStr)){
	ishot = 1;
}
Clob clob = Hibernate.createClob(content);
INewsDao newsDao = new NewsDaoImpl();
News news = new News();
news.setDir(htmlDir + detailDir);
news.setFileName(fileName);
news.setCreateDate(createDate);
news.setCreator(user.getUsername());
news.setTitle(title);
news.setTag(tag);
news.setType(type);
news.setIshot(ishot);
news.setContent(clob);
newsDao.saveNews(news);

注意:要对request获取的字符串用hibernate转化为clob类型  

4.从数据库获取news中的Content:—— 需要对String数据转化成Clob数据

public String getNewsContentById(int id) {
    Session s = null;
    News news = null;
    String content = null;
    try {
        s = HibernateUtil.getSession();
        s.beginTransaction();
        StringBuffer sb = new StringBuffer("select * from news where id = " + id);
        SQLQuery query = s.createSQLQuery(sb.toString());
        news = (News) query.addEntity(News.class).uniqueResult();
        content = ClobUtil.ClobToString(news.getContent());
        s.getTransaction().commit();
    } catch (Exception e) {
        logger.error(e.toString());
        HibernateUtil.endSession(s);
    } finally {
        HibernateUtil.endSession(s);
    }
    return content;
}

注意:要对获取到的实体类中的Clob类型数据转化为String类型  

5.Clob工具类:

public class ClobUtil {

	public static String ClobToString(Clob clob) {
        String clobStr = "";
        Reader is = null;
        try {
            is = clob.getCharacterStream();
	        // 得到流
	        BufferedReader br = new BufferedReader(is);
	        String s = null;
            s = br.readLine();
	        StringBuffer sb = new StringBuffer();
	        //执行循环将字符串全部取出赋值给StringBuffer,由StringBuffer转成String
	        while (s != null) {
	            sb.append(s);
	            s = br.readLine();
	        }
	        clobStr = sb.toString();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return clobStr;
    }
    
}

    注意:通过流的方式读取Clob类型数据

举报

相关文章推荐

oracle中clob类型的使用

oracle数据库当需要存入大数据量(大于4000)时,varchar2不够用,可以使用clob,本文描述clob怎么和Hibernate一起使用。 以公告Notice的公告内容noticeConte...

ORACLE 操作 CLOB 字段

在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了。因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种类型的字段,很灵活,适用于数据...
  • yoland
  • yoland
  • 2011-05-31 08:04
  • 45254

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

java 项目日志管理设计方案

java 项目日志管理设计方案 因项目需要记录整个系统的操作记录,考虑到系统操作日志的数据量,单表很容易达到瓶颈,导致查询效率低下,顾使用分表方案,减小数据库的负担,缩短查询时间。目前对于分表的解...

Oracle中Clob类型处理解析

最近利用NHibernate映射类型为Clob字段在插入数据时发现当字符的字节数(一个半角字符一个字节,一个全角字符两个字节)在2000-4000之间时报错(ORA-01461:仅可以插入LONG列的...

hibernate+oracle+clob的读写

用hibernate封装oracle的clob类型操作起来很不方便,但是新的oracle10g的jdbc驱动,对此有很多改进。下载了最新的Oracle 10g的jdbc驱动。 Hibernate+Or...

Spring ,Hibernate clob大字段处理

1、首先数据表中的clob类型对应java持久化类的String类型;而blob类型对应byte[]类型 2、定义hibernate标签时,持久化类中对应clob类型的属性的hibernate ty...
  • fzzsh
  • fzzsh
  • 2012-05-16 16:50
  • 808

Spring+Hibernate中处理Oracle的大字段(clob二进制\blob大字符串)

对于BLOG和CLOB字段,大部分数据库提供了较为透明的支持,但Oracle比较特殊一些,在用Spring和Hibernate操作时,需要作一些特殊的处理,以CLOB为例,基本有下面几个步骤[注:下面...

Spring 让 LOB 数据操作变得简单易行

转载地址:http://www.ibm.com/developerworks/cn/java/j-lo-spring-lob/

使用Hibernate存取大对象数据类型(clob和blob)

数据库表如下: book表 id 该表的主键。number类型。 photo 代表图书的图片,blob类型。 description 图书的描述,clob类型。 ...

Hibernate处理一个实体映射多张相同结构的数据表--动态映射

LZ在项目中需要处理这样一个业务,每天都有终端设备上传GPS位置信息到服务端,服务端要把GPS位置信息保存在本地,因为每天上传的GPS数据信息会有很多, 所以要把GPS数据按天分别存放在不同的表中,...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)