`
greenish2008
  • 浏览: 20981 次
  • 性别: Icon_minigender_1
  • 来自: 乌鲁木齐
社区版块
存档分类
最新评论

spring+hibernate对Clob的处理

阅读更多

     原来用的oracle 的vachar2 4000字节,感觉应该不小了,没想到没写几个字就完了,没办法,只有用oracle 的Clob了,可是怎么做了,上网查了好多,总结一下。。。

借用一下:

一、问题需求:

 1.在持久化类中字段该用什么类型?
 2.在Struts中文件对应的数据类型是什么?
 3.在Hibernate 中字段对应的类型是什么?
 4.如何在Spring 中处理这些文件?

二、解决:

    如果你用的是oracle 8 那就不用看了,因为下面的方法,好像行不通,你只能再接再励另找方法了!

    我的环境 oracle 10g 1.0.1,spring 1.2 ,hibernate 3.

 

1.持久类映射字段的类型:

    1.1 Blob 用byte[];

    1.2 Clob 用String;

2.Spring 配置文件:

 

	
       <!-- Oracle 9i 以上,oracle 10g 10.1.0.1以下 -->
       <bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor" lazy-init="true"/>
	
       <!-- spring 的操作句柄 -->
	<bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true">
		<property name="nativeJdbcExtractor">
			<ref local="nativeJdbcExtractor"/>
		</property>
	</bean>

    2.1 往sessionFactory 中注入

	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="configLocation"
			value="classpath:hibernate.cfg.xml">
		</property>
		<!--把oracleLobHandler加入sessionFactory中  --> 
		<property name="lobHandler" ref="lobHandler"/>    	
	</bean>

 3. hibernate 配置

 

		<property name="content1" column="CONTENT1" 
		type="org.springframework.orm.hibernate3.support.ClobStringType" length="10000"/>

    注意:length 是字节

 

4.大功就快造成了。就差这么一步

	private String content1;
	public String getContent1() {
		return content1;
	}

	public void setContent1(String content1) {
		this.content1 = content1;
	}
 

就这样直接用吧,spring 把过程都写了,我们就透明着使用吧

 

 

PS:关于网上说的 oracle 10g 1.0.2.0以上版本可用ojdbc14.jar 保留意见!

 

 

分享到:
评论
2 楼 魔力猫咪 2009-04-20  
太麻烦了。Hibernate已经自己解决了Clob的问题,可以直接使用String进行映射。而且配置文件里也只需要写几句话。具体你可以参考我的博客文章
1 楼 greenish2008 2009-04-20  
    对不起啊,上面的解决方案有问题的。这个困扰我一天多的问题终于解决了,这是个惨痛的教训啊。
     废话少说,开始总结:
     1.换ojdbc14.jar oracle 最新的驱动 ,说说简单,说来也是,不过当你遇到什么”error1 :无法连接...“时可能也会烦恼: 上网查了,将myeclipe 下的eclipse.ini
原:
-showsplash
com.genuitec.myeclipse.product
--launcher.XXMaxPermSize
256m
-vmargs
-Xms128m
-Xmx512m
-Duser.language=en 
-XX:PermSize=128M 
-XX:MaxPermSize=256M
改成
-showsplash
com.genuitec.myeclipse.product
--launcher.XXMaxPermSize
256m
-vmargs
-Xms128m
-Xmx512m
-Duser.language=zh 
-XX:PermSize=128M 
-XX:MaxPermSize=256M


2.在映射文件中,将 clob 字段 映成 java.sql.Clob:
		<property name="content1" type="java.sql.Clob" update="true" insert="true">
			<column name="CONTENT1" />
		</property>

2.1持久类中
	
private Clob contentclob; 
private String contentStr;


2.2 关于保存: Hibernate DAO 中的代码
	public void saveClob(TmQuestion tmQuestion) {
		Session session=getHibernateTemplate().getSessionFactory().openSession();
		Transaction tran=session.beginTransaction();
		
		tmQuestion.setContentclob(Hibernate.createClob(" "));
		
		session.update(tmQuestion);
		
		session.flush();

		session.refresh(tmQuestion,LockMode.UPGRADE);
		
		SerializableClob  sc= (SerializableClob)tmQuestion.getContentclob();
		Clob wrapclob = sc.getWrappedClob();
		CLOB clob = (CLOB)wrapclob;
		
/*		CLOB clob = (CLOB) bbsRoot.getContent1();//error
*/        Writer out;
		try {
			Writer characterOutputStream = clob.getCharacterOutputStream();
			out = characterOutputStream;
//	        out.write(bbsRoot.getContent1Str());
			out.write(tmQuestion.getContentStr());
			out.close();
			tran.commit();
			session.close();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println(e.toString());
		}		
	}


2.3 读Clob
			Clob clob = tmQuestion.getContentclob();// 取得Clob的值
			if (clob != null) {
				String clobString = "";
				try {
					clobString = clob.getSubString(1, (int) clob.length());// 将Clob类型的值转换成String类型的值
					tmQuestion.setContentStr(clobString);// 通过setter方法,设置String值,然后就可以通过instance.getInfoContentToString()来取值了
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			return tmQuestion;


相关推荐

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

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

    spring+hibernate 解决大字段(clob)

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

    spring+hibernate操作oracle的clob字段

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

    java存lob数据到sybase数据库

    通过spring存blob和clob数据到sybase数据库中,压缩包里包含了三种方式,(1)spring+hibernate,切面事务(aop),存lob数据,(2)spring+hibernate存lob数据,(3)spring+jdbc存lob数据。

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

     文件数据存储在Blob类型的FILE_CONTENT表字段上,在Spring中采用OracleLobHandler来处理Lob字段(包括Clob和Blob),由于在程序中不需要引用到oracle数据驱动程序的具体类且屏蔽了不同数据库处理Lob字段方法上的...

    upload-files-example:使用 Spring、Hibernate +JPA 的 REST 应用程序设计示例

    上传文件示例关于如何使用 Spring Boot、Hibernate + JPA 注释设计 REST API 的示例项目。 截至目前,已提供表单数据/多部分端点以创建和获取包含 UUID 主键和 CLOB 属性的“模板”。 使用 H2 作为嵌入式数据库。

    Spring.3.x企业应用开发实战(完整版).part2

    1.6 Spring对Java版本的要求 1.7 如何获取Spring 1.8 小结 第2章 快速入门 2.1 实例功能概述 2.1.1 比Hello World更适用的实例 2.1.2 实例功能简介 2.2 环境准备 2.2.1 创建库表 2.2.2 建立工程 2.2.3 类包及Spring...

    ssh对lob完美处理

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

    Spring中文帮助文档

    处理BLOB 和 CLOB对象 11.7.3. 在IN语句中传入一组参数值 11.7.4. 处理复杂类型的存储过程调用 12. 使用ORM工具进行数据访问 12.1. 简介 12.2. Hibernate 12.2.1. 资源管理 12.2.2. 在Spring容器中创建 ...

    Spring3.x企业应用开发实战(完整版) part1

    1.6 Spring对Java版本的要求 1.7 如何获取Spring 1.8 小结 第2章 快速入门 2.1 实例功能概述 2.1.1 比Hello World更适用的实例 2.1.2 实例功能简介 2.2 环境准备 2.2.1 创建库表 2.2.2 建立工程 2.2.3 类包及Spring...

    Spring API

    处理BLOB 和 CLOB对象 11.7.3. 在IN语句中传入一组参数值 11.7.4. 处理复杂类型的存储过程调用 12. 使用ORM工具进行数据访问 12.1. 简介 12.2. Hibernate 12.2.1. 资源管理 12.2.2. 在Spring容器中创建 ...

    spring-framework-reference-4.1.2

    3. New Features and Enhancements in Spring Framework 4.0 ............................................ 17 3.1. Improved Getting Started Experience .........................................................

    spring-framework-reference4.1.4

    3. New Features and Enhancements in Spring Framework 4.0 ............................................ 17 3.1. Improved Getting Started Experience .........................................................

    DBKING使用指南

     这类工具已经很多了,比如大家耳熟能详的Hibernate、iBatis,包括Apache的DBUtils、Spring的JdbcTemplate。为什么我们还要推出db-unifier这样一个功能类似的东西呢?  这些工具的主要目的都是对JDBC进行包装...

Global site tag (gtag.js) - Google Analytics