`

Hibernate对与Oracle中Clob类型的使用

阅读更多

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类型数据

 

 

  • 大小: 17 KB
  • 大小: 6.6 KB
  • 大小: 5 KB
  • 大小: 4.2 KB
  • 大小: 12.1 KB
分享到:
评论

相关推荐

    hibernate存取oracle的clob

    hibernate存取oracle的clob

    关于Oracle的 Clob数据类型在Hibernate中的应用小结

    关于Oracle的 Clob数据类型在Hibernate中的应用小结

    hibernate动态映射表处理oracle的clob类型

    hibernate动态映射表处理oralce10g的clob类型,压缩包为整个工程包. 真诚地希望能帮到你,同时真诚地希望你能和我交流, about any question^_^

    spring+hibernate操作oracle的clob字段

    J2EE开发中,经常会遇到存储大文本的文字信息,而oracle数据库的vachar字段最大能存储4000个字节,存储更大的信息必须使用clob或blob字段,本文档就是针对j2ee开发中对colb字段操作的实现。

    使用hibernate对oracle读取blob

    用hibernate和jdbc读存blob或clob

    spring+hibernate 解决大字段(clob)

    是我自己验证过的 用的是oracle10数据库 文件里面有具体的配置。

    关于在Hibernate中对于Clob,Blob字段的处理方法

    oracle的jdbc驱动程序,用这个版本的操作Clob,blob类型的数据很方便。 博文链接:https://zhenjw.iteye.com/blog/173419

    oracle+hibernate 处理blob +uploadify实例

    oracle+hibernate 处理blob +uploadify实例 结合了 uploadify 上传给件实例 如有需要的可以下载 文件上传组件 Uploadify-3.1-Demo实例详解 文档查看 都是免费的

    spring+hbernate对clob、blob字段的处理

    一个完整的工程,主要功能为:spring+hbernate对clob、blob字段的处理 包括:数据脚本、典型的SSH框架处理,以及spring、hibernate数据批量保存等功能源码、所用到的lib包 数据环境为:oracle 10G 开发:Mycelipse5.1...

    ssh(structs,spring,hibernate)框架中的上传下载

    3在Spring中使用org.springframework.jdbc.support.lob.OracleLobHandler处理Oracle数据库的Blob类型字段。  通过这样的设置和配置,我们就可以象持久化表的一般字段类型一样处理Blob字段了。  以上是Spring+...

    ssh对lob完美处理

    java web 对clob大文本 blob图像处理 这是一个完整的例子,整合了ckeidtor,servlet直接显示数据库blob图片, 注意oracle驱动ojdbc14.jar,如果是其他驱动例如ojdbc14_*g都是不可以的。 表结构看hbm.xml配置文件 ...

    解决can‘t cast to oralce.sql.BLOB架包

    rt,出现这种情况,可以更换下hibernate核心包 即可解决

    Spring中文帮助文档

    在应用服务器中使用Hibernate的注意事项 12.3. JDO 12.3.1. 建立PersistenceManagerFactory 12.3.2. JdoTemplate和JdoDaoSupport 12.3.3. 基于原生的JDO API实现DAO 12.3.4. 事务管理 12.3.5. JdoDialect ...

    Spring API

    在应用服务器中使用Hibernate的注意事项 12.3. JDO 12.3.1. 建立PersistenceManagerFactory 12.3.2. JdoTemplate和JdoDaoSupport 12.3.3. 基于原生的JDO API实现DAO 12.3.4. 事务管理 12.3.5. JdoDialect ...

    DBKING使用指南

    在dbking中,所有的数据库数据只有五种数据类型,String、Number(BigDecimal)、Timestamp、Clob(String)、Blob(byte[]),经过反复测试后,我们会例出各种数据库数据类型到这五种类型的映射表,当然我们也有...

    spring-framework-reference4.1.4

    Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................

    spring-framework-reference-4.1.2

    Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................

Global site tag (gtag.js) - Google Analytics