spring hibernate 处理blob与clob类型

在使用struts+spring+hibernate的开发中,有些时候用户会有数据库存储文件的需求,在数据库中一般会采用
Blob字段或Clob字段来存储二进制图片、流媒体或文件。现就将在实际开发中遇到的问题及解决方法告之。

[b][color=red]一、问题需求:[/color][/b]

1.在持久化类中字段该用什么类型?
2.在Struts中文件对应的数据类型是什么?
3.在Hibernate中字段对应的类型是什么?
4.如何在Spring中处理这些文件?
5.下面有两种解决方案,方案二比方案一更简单.

[b]二、[color=red]解决方案一:[/color][/b]

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服务即可成功上传。


[b][color=red]解决方案二:[/color][/b]
1.将驱动换为ojdbc14.jar,如果使用class12.jar会出错.
2.将数据库中的字段设为blob型,如代码:
create table photo
(
photoId number primary key,
photo blob not null,
);

3.将*.hbm.xml文件中的字段类型设为java.sql.Blob型,如代码:
<property name="photo" type="java.sql.Blob">
<column name="PHOTO" not-null="true" />
</property>

4.将pojo中的属性设为java.sql.Blob型,如代码:
private Blob photo;
public Blob getPhoto() {
return this.photo;
}

public void setPhoto(Blob photo) {
this.photo = photo;
}

5.保存的时候:
FileInputStream fis = new FileInputStream("c:\\a.jpg");
photo.setPhoto(Hibernate.createBlob(fis));
photoService.save(photo);


[color=blue]保存操作完成.上面是对blob类型的操作,下面来看看对clob的操作:[/color]

1.同样要使用ojdbc14.jar作为驱动包.
2.将数据库中的字段设为clob型,如代码:
create table chaptercontent
(
content clob not null,
);

3.将*.hbm.xml文件的字段类型设为text型,如代码:
<property name="content" type="text">
<column name="CONTENT" not-null="true" />
</property>

5.将pojo上的属性设为String型,如代码:
private String content;
public String getContent() {
return this.content;
}

public void setContent(String content) {
this.content = content;
}

经过这些操作之后,我们就可以将clob型的字段当作String型来操作了.
如保存时:
pojoObj.setContent("保存的值");
dao.save(pojoObj);

这样就可以了哦. 很简单了吧!哈哈..........
spring+hibernate 解决大字段(clob) 是我自己验证过的 用的是oracle10数据库 文件里面有具体的配置。 立即下载

相关推荐

SigFit实战:从FEA到光学仿真的热力耦合分析全流程解析

在光机系统与芯片封装等精密工程领域,热与力的耦合效应是影响产品性能与可靠性的核心物理问题。有限元分析(FEA)是预测结构在热、力载荷下变形与应力的基础工具,但其结果通常无法直接用于评估光学性能。这需要一座桥梁,将物理场数据转化为光学设计语言。其核心原理在于数据映射与面形表征技术,例如通过泽尼克多项式拟合,将离散的节点位移分解为离焦、像散等标准光学像差。这项技术的工程价值在于,它实现了多物理场仿真的闭环,使工程师能在设计阶段精准预测热变形或应力对波前误差、调制传递函数等关键光学指标的影响。其典型应用场景包括高

weixin_28630185的博客 338

spring+hibernate clob

         org.hibernate.dialect.Oracle9Dialect                 classpath:hibernate.cfg.xml                      请注意:oracleLobHandler,nativeJdbcExtractor,oracleLobHandler3:这个时候我们操作起blob,clob就非常方便了

xwchen的专栏 4327

90. 将 SAP ABAP 内表内容本地导出成 Excel 文件

这里文件扩展名为 csv,全称是 Comma-Separated Values,意思是这种类型的文件内容,由逗号分隔。除了 ASC 之外,另一个可用的选项是 BIN,适用于 PDF,EXE 等二进制文件的导出。支持海量的输入和输出参数,我们这个简单的本地导出场景里,大部分参数都用不上。这个分隔符的添加逻辑,编写在上图红色高亮矩形框内,使用的语法是。本教程有学习者向我提问,询问如何将 ABAP 某某函数的某某输出参数的值,导出成本地 Excel 文件。把这个内表的内容,下载到本地,以本地文件的方式保存。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1742

hibernate5的注解方式读取写入Blob方式

网上很多都是hibernate3的读取blob的方式,用到了Hibernate.createBlob() 方法,这个方法在hibernate4和5的时候已经被废除了,这个博客是用hibernate5的注解方式读取写入blob文件,读取和存储 核心代码 属性类文件 News 中 pic用byte[]属性,加上get set方法,pic上面用@Blob进行修饰 service文件(写入) ...

baoyiqing1225的博客 2111

基于深度学习的X光安检危险品检测系统(YOLOv8 + UI界面 + 数据集)

随着全球安全形势的变化,机场、车站、地铁等场所的安检工作日益重要。X光安检系统已经成为现代公共安全领域中不可或缺的部分,能够有效地检测物品的内部结构,识别潜在的危险品。然而,传统的X光图像分析方法仍然依赖人工操作,检测效率较低,并且易受到人为因素的影响。近年来,深度学习技术的应用在图像分析领域取得了显著的突破,特别是在目标检测任务中,YOLO(You Only Look Once)模型因其高效性和精度,成为了许多目标检测任务的首选模型。

YOLO 1060

使用再生龙备份还原liunx系统(精确每一步)

再生龙镜像可自行到官网下载(ISO/ZIP格式均可),然后使用tuxboot烧录工具制作启动盘,另外准备一个U盘用来存储备份的镜像文件,即再生龙盘和存储盘是两个分开的。当然也可以用分区工具把同一个硬盘分区来使用,比较方便,先学会基本的吧,只是告诉有个捷径,省个U盘。

米可的博客! 8371

hibernate的4.3.11中大对象Blob和Clob的设置

1、设置对象 Student s = new Student(); s.setAge(13); s.setName("zhang三"); s.setScore(12.22); File f1 = new File("image/Koala.jpg"); InputStream is = new FileInp

chuan_zhang_ak的博客 454

深度学习-176-知识图谱技术之langchain与neo4j的嵌入向量Neo4jVector

使用Neo4jVector将输入的文档向量化,并创建向量索引,然后进行语义检索。

qq_20466211的博客 440

hibernate oracle blob,spring+hibernate中处理oracle BLOB

1、配置hibernate:1.1、配置hibernate的持久类文件中对应的字段为byte[]类型2.2、配置hibernate的类映射文件中对应的字段type为org.springframework.orm.hibernate3.support.BlobByteArrayType2、配置spring:2.1、配置nativeJdbcExtractor,如下:class="org.springf...

weixin_34659856的博客 218

2023年全国青少年信息素养大赛复赛真题(C++智能算法复赛真题:带解析)

2023年全国青少年信息素养大赛复赛真题(C++智能算法复赛真题:带解析)

王老师青少年编程 2114

Java 类与对象 -- Java 语言的类与对象、构造器、static、final、包和 JAR

本篇文章我们将深入了解 Java 语言中的类与对象,探讨构造器、`static`、`final`、包和 JAR 文件。这些概念是面向对象编程的核心,对于理解和掌握 Java 至关重要。

栗筝i的博客 5036

Hibernate中Blob对象类型的使用

使用Intellij IDEA创建Hibernate项目,目录结构如下:        其中 assets/app.png 为将要存储的照片,src/hibernate.cfg.xml 为Hibernate的配置文件,Students为实体,Students.hbm.xml 为对象关系映射的配置文件,test目录下其中使用到的测试类为 StudentsTest 类,使用到junit进行测试。

梦空间 1万+

ABAP 系统里使用 SAP Joule 辅助编程的前提条件

只是说这些大语言模型是针对互联网上能够挖掘到的所有数据进行训练,不像 SAP Joule 那样术业有专攻,仅仅深耕 SAP 技术和业务领域,因此大伙儿对 SAP Joule 的期望值,也远远高于通过大语言模型。SAP Joule 从 ABAP Development Tool 的 Chat 窗口中接收到的对话请求,都会路由到 SAP BTP 上的 AI Foundation.在上述 ABAP 环境中启用 SAP Joule,需要购买额外的 license:8019124.

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 796

使用Spring+hibernate透明操作blob(照片实例) 和clob类型

 1.首先我们介绍hibernate的对应的配置对应于数据库字段我们怎样定义hibernate 的hbm.xml和POJO,对应于BLOB 和CLOB,我们在hbm.xml的定义方式如下:BLOBàorg.springframework.orm.hibernate3.support.BlobByteArrayTypeCLOBàorg.springframewor

鹏飞的专栏 805

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Struts+Spring+Hibernate处理Lob(Blob,Clob)

在使用struts+spring+hibernate的开发中,有些时候用户会有数据库存储文件的需求,在数据库中一般会采用 Blob字段或Clob字段来存储二进制图片、流媒体或文件。现就将在实际开发中遇到的问题及解决方法告之。 一、问题需求:  1.在持久化类中字段该用什么类型?  2.在Struts中文件对应的数据类型是什么?  3.在Hibernate中字段对应的类型是什么?  4.

麦兜的专栏 1016

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Spring 让 LOB 数据操作变得简单易行,LOB 代表大对象数据,包括 BLOB 和 CLOB 两种类型

http://www.ibm.com/developerworks/cn/java/j-lo-spring-lob/index.html 本文讲解了在 Spring 中处理 LOB 数据的原理和方法,对于 Spring JDBC 以及 Spring 所集成的第三方 ORM 框架(包括 JPA、Hibernate 和 iBatis)如何处理 LOB 数据进行了阐述

liangxw1的专栏 2700

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java clob 释放_JAVA中处理CLOB与BLOB的注解问题

JAVA中处理CLOB与BLOB的注解问题java中处理Clob类型:1、注解符处理:@Lob@Basic(fetch = FetchType.EAGER)@Column(name="SUBSTANCE", columnDefinition="CLOB",nullable=true)这种配置完全错误导致信息过长保存失败;1>正确配置方法如下:2>在spring配置文件需要配置:Blob...

weixin_39946029的博客 288

处理lob(blob, clob)

处理lob(blob, clob)

jsjw18的专栏 1944

spring+hibernate中处理oracle BLOB

1、配置hibernate:    1.1、配置hibernate的持久类文件中对应的字段为byte[]类型    2.2、配置hibernate的类映射文件中对应的字段type为    org.springframework.orm.hibernate3.support.BlobByteArrayType 2、配置spring:    2.1、配置nativeJdbcExtractor

JIM110的专栏 606

spring对二进制文件(CLOB与BLOB型)的支持

如果要將 將檔案存入資料庫,我們在JDBC中可以使用CLOB與BLOB來分別針對文字檔案與二進位檔案進行儲存,Spring中可以透過JdbcTemplate來處理CLOB與BLOB。 舉個例子來說,假設您的MySQL資料庫表格如下: 12345 ...

toube的专栏 527

mysql spring blob

在使用struts+spring+hibernate的开发中,有些时候用户会有数据库存储文件的需求,在数据库中一般会采用 Blob字段或Clob字段来存储二进制图片、流媒体或文件。现就将在实际开发中遇到的问题及解决方法告之。 一、问题需求: 1.在持久化类中字段该用什么类型? 2.在Struts中文件对应的数据类型是什么? 3.在Hibernate中字段对应的类型是什么? 4.如何在Spring中...

makemyownlife 258

spring+hibernate 使用clob Blob 方法

转地址[url]http://dev.firnow.com/course/3_program/java/javajs/2007114/83342_2.html[/url] [color=brown] [size=medium] [b] org.hibernate.dialect.Oracle9Dialect ...

peijunlin2008 193

spring+hibernate里面操作clob字段

          org.hibernate.dialect.Oracle9Dialect                 classpath:hibernate.cfg.xml                      请注意:oracleLobHandler,nativeJdbcExtractor,oracleLobHandler3:这个时候我们操作起blob,clob就非常

虫二的专栏~~在路上~~~ 2253

Spring 方式处理 Clob、Blob 大字段

1、在 applicationContext.xml 文件中增加如下配置: Clob大字段 --> bean id= "nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor" lazy-init= "true">bean >

077的专栏 1909
上一篇: 整合spring+struts+ibatis
下一篇: JBoss的配置 端口,虚拟目录,虚拟主机,中文问题,数据库连接
豆芽学Java
博客等级 码龄20年 0粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆芽学Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值