`

处理lob(blob, clob)

阅读更多
Struts+Spring+Hibernate
关键字: 处理lob(blob, clob)
在使用struts+spring+hibernate的开发中,有些时候用户会有数据库存储文件的需求,在数据库中一般会采用
Blob字段或Clob字段来存储二进制图片、流媒体或文件。现就将在实际开发中遇到的问题及解决方法告之。

一、问题需求:

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

二、解决方法:

1.在数据库中这些文件最终是以字节的形式存储二进制对象,所以在持久化类中将相应的属性定义为byte[]类型。

2.在Struts中可以使用<html:file property="" />标签来上传文件,所以与之对应的ActionForm的属性类型为:
FormFile(org.apache.struts.upload.FormFile)类型,即使是使用了动态Form同理也是使用该类型.
提示:同时要将form标签修改为<html:form action="/Action.do" method="post" enctype="multipart/form-data">
以支持文件上传后取得上传数据。在给持久对象赋值时只需调用(FormFile) form.get("property")).getFileData();
方法即可返回byte[]。

3.在Hibernate中文件列对应的类型可以是org.springframework.orm.hibernate3.support.BlobByteArrayType,
org.springframework.orm.hibernate3.support.ClobStringType、clob、blob、binary。什么时候用BlobBYteArrayType
什么时候用ClobStringType?一般如果要处理的对象是数据库字段类型是blob时(主要是图片,二进制对象等),
映射文件设置为:org.springframework.orm.hibernate3.support.BlobByteArrayType 数据库字段是clob(大文本对象)
类型时,要将java的属性的类型定为String,映射文件设置为: org.springframework.orm.hibernate3.support.ClobStringType。

4.如果在spring上要使用Struts中自带的上传功能必须在spring的配置文件中加以声明.否者将会出现?
簀ava.lang.IllegalStateException: No LobHandler found for configuration - lobHandler property
must be set on LocalSessionFactoryBean异常。配置如下:

(1).声明一个处理句柄:
    <bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" lazy-init="true" />
(2).在sessionFactory中注入lobHandler:
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            <property name="lobHandler" ref="lobHandler"/>
    </bean>

提示: 指定lobHandler时,对于MySQL、DB2、MS SQL Server、Oracle 10g,使用DefaultLobHandler即可,而Oracle 9i,
则可以使用OracleLobHandler。因为Oracle9i处理lob的方式和不太一样,所以这里要用spring提供的SimpleNativeJdbcExtractor.处理Oracle9i lob类型的特殊声明:

<bean id="nativeJdbcExtractor" lazy-init="true"    class="org.springframework.jdbc.support.nativejdbc.
SimpleNativeJdbcExtractor"/>

<bean id="lobHandler" lazy-init="true"     class="org.springframework.jdbc.support.lob.OracleLobHandler">
          <property name="nativeJdbcExtractor">
              <ref bean="nativeJdbcExtractor"/>
          </property>
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  
<!-- 为处理Blob类型字段的句柄声明 -->
<property name="lobHandler">
    <ref local="lobHandler" />
</property>
</bean>

同时还应该使用对应的JDBC驱动。

Clob字段定义:<property name="属性名" column="列名" type="org.springframework.orm.hibernate.support.ClobStringType"
length="1048"/>这里的length是指字节,最大可以到2G.该字段在java对象中声明为String类型。

       如果使用的是mysql数据库其默认的上传文件大小只有1047552字节:如果上传的文件大于1047552字节则会出现异常
org.springframework.jdbc.UncategorizedSQLException: You can change this value on the server by setting
the max_allowed_packet' variable.根据提示可以修改mysql数据库的max_allowed_packet属性大小。
打开my.ini文件中找到# SERVER SECTION后在port=3306下面加上max_allowed_packet=?M 修改完后重启mysql服务即可成功上传。
分享到:
评论

相关推荐

    Hibernate对BLOB CLOB操作

    NULL 博文链接:https://ylsuccess.iteye.com/blog/411005

    BLOB和CLOB的区别以及在ORALCE中的插入和查询操作

    BLOB和CLOB的区别以及在ORALCE中的插入和查询操作

    如何将DB2数据库中的大对象(BLOB,CLOB)数据类型复制到Oracle数据库中

    对非DB2数据库的数据复制, 不直接支持LOB(BLOB,ClOB)等大对象数据类型,但在实际应用中,用户需要复制的表中有可能有BLOB等大对象数据,如果数据目标为Oracle,这类大对象复制的需求可通过对WII的复制进行特殊配置实现...

    ORACLE LOB大对象处理.pdf

    oracle dbms_lob 智能大对象(Blob、Clob)

    ORACLE 存储过程返回结果集,拼接为字符串输出为clob

    CLOB变量需要dbms_lob.createtemporary,临时表空间中,建立临时LOB。 大数据量,返回值虽然是CLOB,依然会报错; CLOB变量需要dbms_lob.createtemporary,临时表空间中,建立临时LOB。 大数据量,返回值虽然是CLOB...

    记录一次EXPDP导出BLOB字段 遇到ORA-01555报错

    oracle expdp导出blob字段遇到ora-01555报错的解决方案

    OraLobEditor v3.1

    一款Oracle LOB(CLOB,BLOB)数据类型字段编辑工具,让你快速、高效地进行LOB(CLOB,BLOB)数据类型字段编辑工作。

    ssh对lob完美处理

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

    批量导出ORACLE数据库BLOB字段生成图片

    只需要安装oracle client在本地,然后配置好tns,输入连接名,用户名,密码,数据表的名称,文件名数据列名以及blob数据列名,就可以批量导出ORACLE数据库BLOB字段生成图片

    OraLobEditor 3.0 注册版

    OraLobEditor是一款Oracle LOB(CLOB,BLOB)数据类型字段编辑工具,让你快速、高效地进行LOB(CLOB,BLOB)数据类型字段编辑工作。网络上几乎都找不到高版本的破解版了,这个是3.0的了,算是较新版本了,真的是很难得的...

    java存lob数据到sybase数据库

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

    oracle中读写blob字段的问题解析

    LOB类型分为BLOB和CLOB两种:BLOB即二进制大型对像(Binary Large Object),适用于存贮非文本的字节流数据(如程序、图像、影音等)。而CLOB,即字符型大型对像(Character Large Object),则与字符集相关,适于...

    LOB2Table:将 Oracle CLOB、BLOB、BFILE 或 VARCHAR2 中的 CSV 数据作为表进行查询-开源

    LOB2Table 是一组 Oracle PL/SQL 流水线函数,允许您像普通表一样查询 CLOB、BLOB、BFILE 或 VARCHAR2 中的 CSV 或固定列数据存储。 有关详细说明,请参阅 Wiki。

    Cursor2LOB:从游标(表/查询)创建 CSV 数据作为 Oracle CLOB/BLOB-开源

    Cursor2LOB 是一组 Oracle PL/SQL 例程,它们创建(或附加到)Oracle CLOB 或 BLOB,这些数据包含来自 Cursor(即来自表或查询)的数据,这些数据采用 CSV 或固定列格式。 此外,还有能够将 CSV 数据写入(或附加)...

    oracle数据库修复

    支持的数据类型包括:NUMBER, CHAR, VARCHAR2, NCHAR,NVARHCAR2, LONG, DATE, RAW, LONG RAW, BLOB, CLOB, TIMESTAMP (9i+) , BINARY FLOAT, BINARY DOUBLE (10g+) 全面支持LOB字段: 支持CLOB、NCLOB和BLOB CLOB...

    关于oracle中clob字段查询慢的问题及解决方法

    最近在用oracle的过程中用到了对blob字段模糊查询的问题,对oracle来说,我并不是高手,找了很多的资料终于能够查出来了。 blob字段直接用 select * from table_name where column like ‘%%'查找的时候是不能实现...

    Oracle数据库恢复工具Oracle Database Unloader(ODU)3.09

    支持的数据类型包括:NUMBER, CHAR, VARCHAR2, NCHAR,NVARHCAR2, LONG, DATE, RAW, LONG RAW, BLOB, CLOB, TIMESTAMP (9i+) , BINARY FLOAT, BINARY DOUBLE (10g+) 导出的数据格式包括纯文本和DMP文件两种。以纯...

    Oracle 数据类型

    7、LOB数据类型用于存储大型的,没有被结构化的数据,例如二进制文件,图片文件,LOB主要分为BLOB和CLOB,BLOB数据类型用于存储二进制对象:图像,音频,视频...CLOB数据类型用于存储字符格式的大型对象 ...

    Oracle中instr和substr存储过程详解

    instr和substr存储过程...lob_loc in blob, pattern in raw, offset in integer := 1; nth in integer := 1) return integer; dbms_lob.instr( lob_loc in clob character set any_cs, pattern in varchar2 character

    Ant Lob Accessor-开源

    LobAccessor是一项Ant任务,它允许您将一个或多个blob / clob值从文件系统中的文件上载/下载到Oracle中。 它解决了上载/下载lob值以补充普通sql脚本无法完成的问题。

Global site tag (gtag.js) - Google Analytics