hibernate之Blob,Clob字段

在大多数的情况下,我们需要在库表中保存大型字符串,或者二进制数据(如:图片)。Hibernate提供这样的机制:Blob(图片),Clob(大型字符串);

Blob和Clob的区别在于:Blob字段采用单字节存储,适合保存二进制数据,如图片等;

                                   Clob字段采用多字节存储,适合保存大型文本数据;

Blob和Clob在各种不同的数据库中都有自己各自的实现;

例:tUser.java

 

import java.io.Serializable;
import java.sql.Blob;
import java.sql.Clob;

public class Tuser implements Serializable {
	private Integer tId;
	private String tName;
	private Blob image;
	private Clob info;
        get()/set()...
}
 

属性文件:Tuser.hbm.xml

 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.keith">

	<class name="Tuser" table="tUser">
		<id name="tId" column="tId">
			<generator class="native" />
		</id>
		
		<property name="tName" column="tName"/>
		<property name="image" type="java.sql.Blob"></property>
		<property name="info" type="java.sql.Clob"></property>
	</class>
</hibernate-mapping>

 

 添加一条数据测试:

 

                Tuser tUser = new Tuser();
		tUser.settName("keith");
		
		FileInputStream imges = new FileInputStream("C:/Users/T/Desktop/hankuko.png");
		Blob img = Hibernate.createBlob(imges);
		tUser.setImage(img);
		
		Clob info = Hibernate.createClob("this is more info");
		tUser.setInfo(info);
		
		session.save(tUser);

 

 以上的代码,我们通过Hibernate.createBlob()和Hibernate.createClob()创建了相应的Blob和Clob对象,其中Blob对象基于一个FileInputStream构建,而Clob对象基于一个字符串构建;

下面来对上面插入的数据进行读取:

 

                Tuser tUser = (Tuser) session.load(Tuser.class, new Integer(1));
		Clob info = tUser.getInfo();
		System.out.println("user's info:"+info.getSubString(1, (int) info.length()));
		Blob image = tUser.getImage();
		InputStream is = image.getBinaryStream();
		FileOutputStream fos = new FileOutputStream("C:/Users/T/Desktop/hankuko1.png");
		byte[] buf = new byte[102400];
		int len;
		while ((len = is.read(buf))!=-1) {
			fos.write(buf,0,len);
		}
		fos.close();
		is.close();
		

 

 《hibernate深入浅出中》指出并不是每种数据库都支持这种读法(这个实例是在mysql下操作的),在oracle中就可能会出数据库不允许操作的异常:streams type cannot be used in batching;遇到这中情况的话,在hibernate.cfg.xml中加入:

 

<property name="hibernate.jdbc.batch_size">0</property>

 还是会出现异常,是因为在Oracle中对Blob/Clob有独特的访问方式,Oracle的Blob/Clob字段本身有一个游标(cursor),JDBC必须通过游标对Blob/Clob字段进行操作,这样的话,我们就得先创建一个空的Blob/Clob字段,再从这个空的Blob/CLob字段获取游标,写入我们所期望保存的数据;

 

		Tuser tUser  = new Tuser();
		tUser.settName("keith");
		tUser.setImage(Hibernate.createBlob(new byte[1]));
		tUser.setInfo(Hibernate.createClob(" "));
		session.getTransaction().commit();
		
		session.flush();
		//通过refresh()让强制让Hibernate执行Select for update
		session.refresh(tUser,LockMode.UPGRADE);
		
		oracle.sql.Blob blob = (oracle.sql.Blob)tUser.getImage();
		OutputStream out = blob.getBinaryOutputStreamStream();
		FileInputStream image = new FileInputStream("C:/Users/T/Desktop/hankuko1.png");
		byte[] buf = new byte[102400];
		int len;
		while ((len = image.read(buf))!=-1) {
			image.write(buf,0,len);
		}
		image.close();
		out.close();
		
		oracle.sql.Clob clob = (oracle.sql.Blob)tUser.getInfo();
		java.io.Writer writer = clob.getCharacterOutputStream();
		writer.write("this is my Info");
		writer.close();
		session.save(tUser);
		session.getTransaction().commit();

 Oracle没有经过试验!

 

 

基于Pycatia的智能孔特征识别技术:无参模型圆心自动化提取方案 阅读详情

相关推荐

噪声整形与过采样实战:从N-bit ADC到DSM的SQNR优化指南

本文深入探讨了噪声整形与过采样技术在DSM(Delta-Sigma调制器)中的应用,重点分析了量化器位数(N)、滤波器阶数(L)和过采样率(OSR)对SQNR优化的影响。通过实战案例和参数协同优化策略,帮助工程师在音频处理和通信系统设计中实现更优的信号质量。

weixin_42561040的博客 339

Hibernate如何使用Blob对象类型(秒懂)

Hibernate中Blob对象类型的使用 编辑器 Intellij IDEA 2019 3.3 先创建Hibernate项目,导入相应的安装包 工具包:下载 1. hibernate.cfg.xml配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC ...

wBkvam 700

ECC密码的加密和解密(附带代码实现)

ECC,全称Elliptic Curve Cryptography,是椭圆曲线密码学。这是一种公钥加密技术,其安全性基于椭圆曲线离散对数问题,被广泛应用于信息安全领域。ECC的主要优势在于,相较于RSA和DSA等其他传统的公钥密码体系,它能够在提供相同安全级别的情况下,使用更短的密钥,从而减少计算量和存储空间的需求。例如,一个256位的ECC密钥提供的安全性可以与3072位的RSA密钥或DSA密钥相媲美。ECC的主要应用领域包括SSL安全证书、安全电子邮件、移动设备安全、物联网设备安全等。

xixixi7777的博客 8271

Hibernate操作Blob数据

首先看数据库,数据库中新建一个BlobTable表,表中有两个字段,一个id(主键)一个picture字段是Blob类型字段。然后使用Hibernate向该数据库中写入和读取数据 在POJO类中picture属性用的是Blob类型数据。 下面看操作源码 package dao; import java.io.File; import java.io.FileInputStream; imp

翻滚吧小牛 2272

Unity Animancer插件(一)基本使用

Animancer是什么?资源商店主页我们来通过Animancer实现一个最基本的动画播放效果。首先创建一个脚本,编写如下代码 很容易理解,就是在时播放一个指定的动画片段。接下来为角色添加、和刚刚编写的,并为字段赋值 接下来运行游戏就可以看到效果了 此时角色身上的组件可以看到当前动画的各项参数 下面我们来实现通过按键控制角色在于之间转换。新创建一个脚本。在代码中监听Y轴上的输入。然后根据监听到的数值判断角色状态,并播放相应的动画 给对应字段赋值后,启动游戏看下效果 下面来实现一个开枪效果。在默认状态下,角色

夜槿笙歌的博客 1万+

8155平台multi-display(多屏显示)原理与配置

8155平台多屏互动原理与配置

漂流瓶の海岸 1606

使用 hibernate 存取大对象数据类型(clob和blob)

数据库表如下: book表 id 该表的主键。number类型。 photo 代表图书的图片,blob类型。 description 图书的描述,clob类型。 使用 hibernate3 往 book 表插入Clob,Blob数据 省略hibernate配置文件,实体映射文件和实体类代码,直接帖

z69183787的专栏 2万+

Cloudflare 5秒盾逆向实战:13次请求背后的Python补环境框架搭建指南

本文深入解析了如何通过Python构建浏览器环境模拟框架,以应对Cloudflare 5秒盾等现代Web防护机制。文章详细拆解了其背后复杂的13次请求链,涵盖了JavaScript执行引擎集成、DOM事件模拟、网络请求控制及Canvas指纹等环境检测的完整实现方案,为自动化数据采集和逆向工程提供了实战指南。

gold的博客 348

Hibernate中Blob对象类型的使用

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

梦空间 1万+

EnlightenGAN训练复现记录

记录EnlightenGAN过程中的问题和解决方式。提示:以下是本篇文章正文内容,下面案例可供参考。

L_27N113E的博客 3847

YOLOv8 改进:添加 LSK 注意力机制

通过添加 LSK 注意力机制,YOLOv8 能够更有效地捕捉特征图上的重要信息,提高检测性能,尤其是在复杂场景下展现出色的表现。这种方法不仅适用于资源受限的设备,还能在丰富多样的实际应用中提供强劲支持。

走向CTO的路上... 1221

Hibernate实现Clob和Blob对象的存取

作为测试,我们新建一个TUser对象,其image属性中,保存了一个图片文件的二进制内容。而其resume属性,我们以一个简单的字符串作为填充。    1 TUser user  = new  TUser();   2  3 user.setAge( new  Integer( 20 ));   4  5 user.setName( " Shark " );

juce的专栏 755

【点云鸟瞰图BEV】点云鸟瞰图BEV原理与可视化

本节将介绍激光雷达等点云的鸟瞰图生成原理、代码及效果图。 1 BEV视图原理 点云BEV(Bird's Eye View)视图是指点云在垂直于高度方向的平面上的投影。通常,在获得bev视图前,会将空间分割成体素,利用体素对点云进行下采样,然后将每个体素作为一个点进行投影。体素是指将三维空间按照固定尺寸长方体进行划分时的长方体(Δl*Δw*Δh)。 体素投影时可以得到BEV视图的像素点坐标。每个像素点的特征取值则可以通过多种方式得到。 ...

叶子的博客 2万+

Hibernate操作Oarcle中Clob、Blob字段小结

最近常碰到有人问如何运用Hibernate操作Oracle中的Clob、Blob字段,相关问题大概如下几种: 如何读、写数据库中的Clob、Blob字段? 注释方式或者映射文件两种方式是如何实现的? Clob字段是否可当成一般String来操作? 为什么Clob字段插入正常,但是读取时却为null JDBC的驱动是不是需要最新的,才能支持Clob当成String? JDBC驱动不更新,...

奋斗的小马 191

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

hibernate映射clob blob字段

在许多情况下要存储大型字符串或者二进制数据如图片等hibernate也提供了对blob和clob类型的支持 blob采用单字节存储适合保存二进制数据,如图片文件clob采用多字节存储适合保存大型文本等 在mssql中 image和ntext分别对应着blob和clob 表映射文件对两种类型的写法 对于blob格式的映射类型为type="java.sql.Clob";

pingchagnxin007的专栏 743

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

hibernate oracle blob,hibernate对oracle数据库CLOB、blob类型字段处理原则

在hibernate中对oracle的clob和blob字段的处理采用光标的方式来处理,其中隐含的深层含义是:对该类型字段的存取,hibernate维护了一个关联该字段的数据库的连接A,该连接和session的连接有可能不是同一个,因此问题就出来了,在session中缓存的具有该字段的对象,如果上述的连接A断开,那么该字段的获取将报错。如下: java.sql.SQLException: Must...

weixin_40007175的博客 306

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

关于在Hibernate中对于Clob,Blob字段的处理方法

主要的配置项是 [code="java"] ........ oracle.jdbc.driver.OracleDriver true true ................ [/code] .hbm.xml [code="java"] ...

zhenjw 249

Hibernate读写Clob和Blob类型字段

数据库脚本: create table testcb(id varchar(32) primary key,name varchar(32),photo blob,description text);  Hibernate.cfg.xml   xml version='1.0' encoding='UTF-8'?> DOCTYPE hibernate-configuration PUBL

juce的专栏 631

spring+hibernate中clob、blob字段的处理方法

转spring+hibernate中clob、blob字段的处理方法 http://sucre.iteye.com/blog/715923 SpringHibernateBeanJDBCOracle今天在开发...

153

标准的hibernate存取blob和clob字段的方法

昨在颇为郁闷,利用hibernate保存图片到blob字段时出现保存成功,但读出来的确是空数据的问题;但回家一试,竟然是OK的,不知哪个环节出了问题,但总算是圆满结局~ 程序代码Transaction tx=session.beginTransaction();byte[] b=new byte[1024];img.setTitle(title);img.setAdddate(new 

spring028的专栏 687

hibernate clob mysql_hibernate映射clob blob字段

在许多情况下要存储大型字符串或者二进制数据如图片等hibernate也提供了对blob和clob类型的支持blob采用单字节存储适合保存二进制数据,如图片文件clob采用多字节存储适合保存大型文本等在mssql中 image和ntext分别对应着blob和clob表映射文件对两种类型的写法对于blob格式的映射类型为type="java.sql.Clob";对bean的写法没区别直接生成gette...

weixin_31953691的博客 401

Spring+hibernate对clob、blob字段的处理方法

     今天在开发项目的时候遇到CLOB字段的问题,和平时的String字段一样处理发现HQL的查询结果是NULL,到网上查找了一些资料,处理方式作了一些修改以后,数据成功显示,现总结配置如下:  1.spring的配置文件 (applicationContext-hibernate.xml)          说明,这是我们系统中的文件名,不同系统会有不同,主要是Spring+hibe

鹏飞的专栏 1427

hibernate clob mysql_解析使用jdbc,hibernate处理clob/blob字段的详解

(1)不同数据库中对应clob,blob的类型:mysql中 : clob对应text blob对应blobdb2/oracle中 clob对应clob blob对应blob(2)domain中对应类型:clob 对应 String blob 对应 byte[]clob 对庆 java.sql.Clob blob 对应 java.sql.Blob(3)hibernate配置文件中对应类型:c...

weixin_31861055的博客 243

使用JDBC,Hibernate处理clob/blob字段

1、首先要知道的 (1)不同数据库中对应clob,blob的类型: mysql中 : clob对应text  blob对应blob db2/oracle中 clob对应clob blob对应blob (2)domain中对应类型: clob 对应 String   blob 对应 byte[] clob 对庆 java.sql.Clob blob 对应 java.sql.Blob (3)hib...

gqsunrise 196

hibernate对oracle数据库CLOB、blob类型字段处理原则

      在hibernate中对oracle的clob和blob字段的处理采用光标的方式来处理,其中隐含的深层含义是:对该类型字段的存取,hibernate维护了一个关联该字段的数据库的连接A,该连接和session的连接有可能不是同一个,因此问题就出来了,在session中缓存的具有该字段的对象,如果上述的连接A断开,那么该字段的获取将报错。如下: java.sql.SQLException

sunday的专栏 1170
上一篇: hibernate之复合主键
下一篇: hibernate之面向设计的细分
keithJava
博客等级 码龄16年 2粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值