`
greenish2008
  • 浏览: 21318 次
  • 性别: 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+hibernate 解决大字段(clob)

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

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

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

    spring+hibernate操作oracle的clob字段

    Spring和Hibernate会自动处理CLOB的存取,无需额外的特殊处理。例如,如果你有一个更新方法,可以如下所示: ```java public void updateEntity(Entity entity) { assessRegDao.update(entity); } ``` 其中...

    Spring+Hibernate处理Oracle lob字段(一)

    总之,处理Oracle数据库中的LOB字段需要对Spring、Hibernate以及Oracle JDBC驱动有深入理解。通过合理配置和使用相应的API,我们可以有效地管理大体积数据,实现与数据库的高效交互。在实际项目中,根据具体需求和...

    移动ssh项目(struts+spring+hibernate+oracle).zip

    同时,Spring还提供了对其他框架(如Hibernate)的集成,使得开发者能更方便地使用这些框架。 3. Hibernate:Hibernate是一个对象关系映射(ORM)框架,它允许开发者使用Java对象来操作数据库,而无需直接编写SQL...

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

    这个压缩包文件"spring1.2+hibernate3对大字段的处理实例"提供了一个具体的案例,演示了如何在Spring 1.2和Hibernate 3框架下解决这个问题。下面我们将深入探讨这些知识点。 首先,Spring 1.2是一个轻量级的Java...

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

    在IT领域,尤其是在Java开发中,Spring和Hibernate是两个非常重要的框架。...这个"spring1.2+hibernate2对大字段的处理实例"就是一个很好的学习资源,能够帮助开发者深入理解如何在旧版框架下处理这类问题。

    oracle+hibernate 处理blob +uploadify实例

    &lt;property name="photo" type="org.springframework.orm.hibernate3.support.BlobByteArrayType"&gt; &lt;/hibernate-mapping&gt; ``` 接下来,我们关注上传过程的Java代码。这里使用了`ServletFileUpload`类,它是...

    java存lob数据到sybase数据库

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

    hibernate存取oracle的clob

    确保 Hibernate 的配置文件(通常为 `hibernate.cfg.xml` 或者 Spring 的配置文件)正确配置了数据库连接信息,以及支持 CLOB 类型的配置。 **2.2 实体类设计** 假设我们有一个用户实体类 `User`,其中包含一个 ...

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

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

    spring3+springmvc+jpa2+gae

    Spring 3是其较早的一个版本,但仍然广泛使用,提供了依赖注入(DI)、面向切面编程(AOP)以及对其他框架如MyBatis、Hibernate的整合支持。 **Spring MVC** Spring MVC是Spring框架的一部分,专为构建Web应用程序...

    java中(注解符)处理Clob(blob)类型

    Java 中处理 Clob 和 Blob 类型的注解配置 Java 中处理 Clob 和 Blob 类型的注解配置是一种常见的处理大规模数据的方法。Clob(Character Large OBject)类型和 Blob(Binary Large OBject)类型是数据库中两种常用...

    Spring,SpringMVC,Hibernate,Oracle知识汇总

    Spring还提供了对数据库访问的支持,包括JDBC抽象层和集成ORM框架,如Hibernate。 **SpringMVC**:Spring MVC是Spring框架的一部分,用于构建Web应用程序。它采用模型-视图-控制器(Model-View-Controller,MVC)...

    Hibernate 多数据库支持解决方案

    - 在Spring或`hibernate.cfg.xml`配置文件中,可以使用宏定义或者条件注解来根据数据库类型加载不同的映射文件。这样,不同的数据库环境只需配置相应的连接参数,而无需修改核心的配置文件。 4. **大字段处理** -...

    hibernate使用中与各种数据库字段类型对应类型训练

    这通常用于存储图片或大文件,Hibernate用`byte[]`或`org.springframework.web.multipart.MultipartFile`来处理。 7. **CLOB(字符大对象)**:用于存储大量文本数据,如XML文档,对应的Java类型是`java.sql.Clob`...

    使用Jdbc4操作Blob,Clob

    Spring可以帮助管理数据库连接和事务,而Hibernate则提供了方便的对象关系映射,使得处理LOB如同操作普通Java对象一样简单。 总的来说,JDBC4为Blob和Clob的处理提供了许多改进,使得在Java应用程序中处理大数据...

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

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

    三个ssh框架

    Hibernate4相较于之前的版本,优化了查询性能,支持了更多的JPA标准,并引入了二进制大型对象(Blob/Clob)的处理。 “sshtest”可能是一个整合了SSH三个框架的示例项目,用于演示如何在实际开发中将它们集成在一起...

    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...

Global site tag (gtag.js) - Google Analytics