`
ll_2046
  • 浏览: 5148 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Spring+Hibernate实现Oracle的BLOB、CLOB上传

阅读更多
  现在网上有很多这方面的资料,但是很多都是互相转贴而来。2006年我们做了一个油田方面的项目,是关于油藏描述的,其中涉及了非常多的资料需要上传到Oracle数据库中,我查了很多资料,摸索了很长一段时间,现在我将自己总结的发布一下,如有什么问题,还请各位网友多多指导。

我们采用的是Spring1.2.7,Hibernate3.0,MyEclipse4.1,Eclipse3.1.1
服务器用Weblogic9.1
将Spring、Hibernate和commons-fileupload-1.0.jar等相应的jar文件加载;

1.pojo中:
将BLOB字段映射为byte[],如:private byte[] wjsj;
将CLOB字段映射为String;

2.Hibernate映射文件(**.hbm.xml)中:
BLOB字段映射为:org.springframework.orm.hibernate3.support.BlobByteArrayType,如:
<property name="wjsj" type="org.springframework.orm.hibernate3.support.BlobByteArrayType" lazy="true">
    <column name="WJSJ"/>
</property>
CLOB字段映射为:
type="org.springframework.orm.hibernate3.support.ClobStringType"或type="text"

3.配置文件(applicationContext.xml)中:
引用
  Oracle的Lob字段和一般类型的字段在操作上有一个明显的区别--那就是你必须首先通过Oracle的empty_blob()/empty_clob()初始化Lob字段,然后获取该字段的引用,通过这个引用更改其值。所以要完成对Lob字段的操作,必须执行两步数据库访问操作,先Insert再Update。BlobByteArrayType数据类型通过LobHandler将两次数据访问的动作隐藏起来,使Blob字段的操作在表现上和其他一般字段业类型无异。LobHandler必须注入到Hibernate会话工厂sessionFactory中,因为sessionFactory负责产生与数据库交互的Session。


<bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"    lazy-init="true">
</bean>
<bean id="lobHandler"
      class="org.springframework.jdbc.support.lob.OracleLobHandler"
      lazy-init="true">
   <property name="nativeJdbcExtractor">
      <ref local="nativeJdbcExtractor" />
   </property>
</bean>
//Spring对文件上传的支持由内置的multipart包中的插件对象MultipartResovler来完成的,使用common-fileupload.jar的调用方法
<bean id="multipartResolver" 
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
    <property name="maxUploadSize">
       <value>1073741824</value>//设置上传文件最大值
    </property>
    <property name="maxInMemorySize">
       <value>1048576</value>
    </property>
</bean>

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="lobHandler" ref="lobHandler"/>将上面的lobHandler注入到Hibernate的Session工厂中
    <property name="mappingDirectoryLocations">	
      <list>	 
         <value>classpath:/com/fileuplaod/spring/pojo</value>	
      </list>
   </property>
   <property name="hibernateProperties">
      <props>
         <prop key="hibernate.dialect">${hibernate.dialect}</prop>
         <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
         <prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>
         <prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>
     </props>
   </property>
</bean>

4.页面中:
在form中加enctype=“multipart/form-data”属性;

5.控制类(Controller)中:
  继承自org.springframework.web.servlet.mvc.multiaction.MultiActionController
abstract public class BaseController extends MultiActionController {
/**
* 初始化binder,注册Editor
 */
   protected void initBinder(HttpServletRequest request,
			ServletRequestDataBinder binder) {
        binder.registerCustomEditor(byte[].class, new ByteArrayMultipartFileEditor());//BLOB
        binder.registerCustomEditor(String.class, new StringMultipartFileEditor());//CLOB
   }
}


/**
* 绑定并校验对象
*控制类中最重要的方法是initBinder()它给spring注册了一个编辑器对request中的mu*ltipart实体进行处理,如果没有这个方法,上传将不能进行。
*/
protected BindException bindObject(HttpServletRequest request,
	Object command) throws Exception {
    preBind(request, command);

    ServletRequestDataBinder binder = createBinder(request, command);
    initBinder(request,binder);
    binder.bind(request);
}

  我最开始在Tomcat5.0.28下使用,发现最大上传都不能超过10M,后来改在Weblogic9.1下使用,在Weblogic的Admin Server Console中修改了阻塞线程计时器间隔的时间默认60秒),我最大上传过160M,上传成功了,比这再大我也没有试过了。

  另外,第一次发帖,内容写的比较混乱,还望各位网友见谅!呵呵!
分享到:
评论
1 楼 jamesby 2007-01-27  
大文件的上传应该是FTP Server的天下啊.如果用app server经常传如此大的文件?性能如何保证?

相关推荐

    spring+hibernate操作oracle的clob字段

    在J2EE开发中,处理大数据对象(如大文本或二进制数据)时,Oracle数据库的CLOB...通过以上配置和操作,你可以在Spring和Hibernate的环境中顺利地对Oracle数据库的CLOB字段进行读写,满足J2EE应用中的大数据存储需求。

    spring+hibernate 解决大字段(clob)

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

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

    在本文中,我们将深入探讨如何在Java环境下,利用Spring和Hibernate框架处理Oracle数据库中的LOB(Large Object)字段。LOB字段通常用于存储大体积的数据,如文本、图片或视频。在实际开发中,处理这类数据时可能会...

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

    在这个名为“移动ssh项目(struts+spring+hibernate+oracle)”的压缩包中,我们可以看到一个利用这些技术构建的项目实例,结合Oracle数据库。以下是关于SSH框架及Oracle数据库的详细介绍: 1. Struts:Struts是MVC...

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

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

    oracle+hibernate 处理blob +uploadify实例

    综上所述,这个实例展示了如何在Oracle数据库中使用Hibernate处理Blob数据,结合Uploadify实现文件上传。这种解决方案不仅适用于Oracle,理论上也适用于其他支持Blob类型的数据库,如MySQL和MSSQLServer。了解这些...

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

    总结来说,"spring1.2+hibernate3对大字段的处理实例"是一个宝贵的教育资源,它涵盖了Spring和Hibernate在处理大字段时的关键技术,以及如何在Eclipse环境中实现这些技术。通过对这个实例的学习和研究,开发者能够...

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

    Hibernate2支持将Java的`java.sql.Blob`和`java.sql.Clob`对象映射到数据库的Blob和Clob字段,这样可以存储大数据而不影响其他字段。 2. **文件系统存储**:大字段数据可以存储在文件系统中,然后在数据库中仅存储...

    Spring,SpringMVC,Hibernate,Oracle知识汇总

    Oracle支持复杂的数据类型,如BLOB和CLOB,以及高级的数据库特性,如物化视图、分区表和触发器。在Java开发中,通常通过JDBC驱动与Oracle进行交互,或者利用Hibernate等ORM框架进行更高级别的操作。 这四个技术的...

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

    Struts+Spring+Hibernate实现上传下载    本文将围绕SSH文件上传下载的主题,向您详细讲述如何开发基于SSH的Web程序。SSH各框架的均为当前最新版本:  •Struts 1.2  •Spring 1.2.5  •Hibernate 3.0  本文...

    使用Jdbc4操作Blob,Clob

    在Java的数据库编程中,JDBC(Java Database Connectivity)是一个重要的接口,用于与各种数据库进行交互。当涉及到处理大型对象...无论是直接使用JDBC还是结合ORM框架,都可以灵活地实现对Blob和Clob的读写操作。

    中国移动业务管理系统

    它支持复杂的数据类型,如BLOB、CLOB,以及高级的索引策略,能满足大规模数据存储和高效查询的需求。 运行环境选择了Tomcat服务器,这是一个开源的轻量级应用服务器,兼容Java Servlet和JavaServer Pages(JSP)...

    简单毕业选题系统-ssh框架连接Oracle

    它支持复杂的数据类型,如BLOB、CLOB、NCLOB等,还提供了丰富的数据库特性,如索引、分区、存储过程、触发器等。在SSH框架中,通过JDBC驱动或者Hibernate的Session接口,可以与Oracle数据库进行交互。 【Eclipse...

    Hibernate 多数据库支持解决方案

    - 当处理大量数据或大字段时,如BLOB或CLOB类型,需要注意内存管理和数据库性能。可以使用`lob`类型映射,或者考虑使用游标(Cursor)进行分批处理,以减少内存占用并提高性能。 5. **Hibernate主键生成器(数值型...

    三个ssh框架

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

    ssh对lob完美处理

    structs1.2 spring2.5 hibernate3.0 java web 对clob大文本 blob图像处理 这是一个完整的例子,整合了ckeidtor,servlet直接显示数据库blob图片, 注意oracle驱动ojdbc14.jar,如果是其他驱动例如ojdbc14_*g都是不...

    Spring jar 包.zip

    它支持复杂的数据类型,如BLOB(二进制大对象)和CLOB(字符大对象),并提供了高级的索引策略,如位图索引和函数索引。Oracle还提供了丰富的安全特性和强大的备份恢复机制。 整合这些组件意味着创建一个包含Spring...

    oracle基础练习.docx

    Oracle提供多种数据类型,如CHAR、VARCHAR2、NUMBER、DATE以及LOB(包括BLOB和CLOB)。日期格式可以使用TO_DATE函数转换,例如`to_date('2016-6-1','yyyy-MM-dd')`,或者直接使用DATE'2016-6-1'。 分析函数如RANK()...

    Spring中文帮助文档

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

Global site tag (gtag.js) - Google Analytics