使用 hibernate 存取大对象数据类型(clob和blob)
数据库表如下:
book表
id | 该表的主键。number类型。 |
photo | 代表图书的图片,blob类型。 |
description | 图书的描述,clob类型。 |
使用 hibernate3 往 book 表插入Clob,Blob数据
省略hibernate配置文件,实体映射文件和实体类代码,直接帖实现代码:
package accp.hibernate; import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.Clob;
import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class Client { public static void main(String[] args) throws IOException {
//得到session
Configuration cfg = new Configuration().configure();
SessionFactory sf = cfg.buildSessionFactory();
Session session = sf.openSession();
//得到图片的blob
InputStream in = new FileInputStream("F:\\4563123.jpg");
Blob blob = Hibernate.createBlob(in);
//得到简介的clob
Clob clob = Hibernate.createClob("这是一本书和详细描述。#(*&#@¥%(*&@¥)(@#¥#¥");
//创建图书对象
Book book = new Book();
book.setPhoto(blob);
book.setDescription(clob);
//存进数据库
session.beginTransaction();
session.save(book);
session.getTransaction().commit();
session.close();
} }
使用hibernate的静态方法createBlob()得到Blob对象。createBlob方法需要一个InputStream对象作为参数。new一个FileInputStream作为它的参数,假设在F盘有一个图片文件名为4563123.jpg。
使用hibernate的静态方法createClob()得到Clob对象。createClob方法直接传入字符串即可。
使用 hibernate3 从 book 表取出Clob,Blob数据
省略hibernate配置文件,实体映射文件和实体类代码,直接帖实现代码:
1 package accp.hibernate;
2
3 import java.io.FileOutputStream;
4 import java.io.IOException;
5 import java.io.InputStream;
6 import java.io.OutputStream;
7 import java.io.Reader;
8 import java.sql.SQLException;
9 import org.hibernate.Session;
10 import org.hibernate.SessionFactory;
11 import org.hibernate.cfg.Configuration;
12
13 public class Client {
14
15 public static void main(String[] args) throws IOException, SQLException {
16 //得到session
17 Configuration cfg = new Configuration().configure();
18 SessionFactory sf = cfg.buildSessionFactory();
19 Session session = sf.openSession();
20
21 //从数据库里取值
22 session.beginTransaction();
23 Book book = (Book)session.get(Book.class,22);
24 session.getTransaction().commit();
25 session.close();
26 //把简历打印到控制台
27 Reader reader = book.getDescription().getCharacterStream();
28 int i = reader.read();
29 while(i!=-1){
30 System.out.print((char)i);
31 i=reader.read();
32 }
33 reader.close();
34 //把图片拷贝到D盘
35 InputStream in = book.getPhoto().getBinaryStream();
36 OutputStream out=new FileOutputStream("d:\\out.jpg");
37 byte[] b=new byte[1024];
38 while((i=in.read(b))!=-1){
39 out.write(b);
40 }
41 out.close();
42 in.close();
43 }
44
45 }
21-25行代码把数据从数据库中取出,封装到book对象中。
为了验证取值是否成功,第26-33行代码把Clob对象的内容打印到控制台,通过Clob对象的getCharacterStream()方法得到包含 CLOB
数据的 java.io.Reader
对象,然后通过操作Reader对象把内容输出。
第34-42行代码把Blob对象包含的内容拷贝到d:\out.jpg文件中。通过Blob对象的getBinaryStream()方法得到包含 BLOB
数据的流,通过操作流把内容拷贝。
使用 hibernate4 往 book 表插入Clob,Blob数据
hibernate4相比hibernate3要复杂一些,如下:
//省略import........... public class Client { public static void main(String[] args) throws IOException {
//得到session
Configuration cfg = new Configuration().configure();
ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
SessionFactory sf = cfg.buildSessionFactory(sr);
Session session = sf.openSession();
//得到LobHelper
LobHelper lobHelper = session.getLobHelper();
//得到图片的blob
InputStream in = new FileInputStream("F:\\4563123.jpg");
Blob blob = lobHelper.createBlob(in, in.available());
//得到简介的clob
Clob clob = lobHelper.createClob("这是一本书。#(*&#@¥%(*&@¥)(@#¥#¥");
//创建图书对象
Book book = new Book();
book.setPhoto(blob);
book.setDescription(clob);
//存进数据库
session.beginTransaction();
session.save(book);
session.getTransaction().commit();
session.close();
} }
hibernate4中得到session对象的方法和hibernate3中略有不同,但用hibernate3的写法也是可以的。
在hibernate4中 hibernate.createBlob() 方法和 hibernate.createClob() 已经过时,取而代之的是LobHelper.createBlob()和lobHelper.createClob()。可以通过session.getLobHelper();得到LobHerlper对象。
取值 和hibernate3 基本一样,这里不再演示!
使用 hibernate 存取大对象数据类型(clob和blob)的更多相关文章
- Spring 让 LOB 数据操作变得简单易行,LOB 代表大对象数据,包括 BLOB 和 CLOB 两种类型
转自:https://www.ibm.com/developerworks/cn/java/j-lo-spring-lob/index.html 概述 LOB 代表大对象数据,包括 BLOB 和 CL ...
- Statement和PreparedStatement的特点 MySQL数据库分页 存取大对象 批处理 获取数据库主键值
1 Statement和PreparedStatement的特点 a)对于创建和删除表或数据库,我们可以使用executeUpdate(),该方法返回0,表示未影向表中任何记录 b)对于创建和 ...
- [转帖]Oracle数据库lob大对象数据类型字段总结,值得收藏
Oracle数据库lob大对象数据类型字段总结,值得收藏 原创 波波说运维 2019-07-11 00:02:00 https://www.toutiao.com/i67108943269703357 ...
- oracle对大对象类型操作:blob,clob,nclob
1.基本介绍 Oracle和plsql都支持lob(large object) 类型,用来存储大数量数据,如图像文件,声音文件等.Oracle 9i realse2支持存储最大为4g的数据,or ...
- Hibernate的大对象映射
1在持久类中直接声明是java.sql.Blob类型 2在.hbm.xml文件中配置一下信息 <!-- 映射大对象 (就是字符长度超过255和图片想转换成二进制的数据)--> <!- ...
- Oracle数据类型clob和blob
clob(size)变长 字符型大对象,最大8tb 应用场景:如果varchar2不够用了使用clob blob(size)变长 二进制数据,可以存放图片声音 8tb 但是,实际工作中很少把图片和声音 ...
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- hibernate 大对象类型hibernate制图
基础知识: 在 Java 在, java.lang.String 它可以用来表示长串(超过长度 255), 字节数组 byte[] 可用于存放图片或文件的二进制数据. 此外, 在 JDBC API 中 ...
- Oracle数据库中的大对象(LOB)数据类型介绍
一.LOB数据类型的介绍 大对象(LOB)数据类型允许我们保存和操作非结构化和半结构化数据,如文档.图形图像.视频片段.声音文件和XML文件等.DMBS_LOB 包被设计用于操作 LOB 数据类型.从 ...
随机推荐
- UBUNTU系统root帐号解锁
UBUNTU系统启动时默认以安装系统时输入的用户名进行登录.如:以非root帐号rusky登录系统,当我们做某些操作时系统提示需要输入root密码.但我们并没有设置过root密码.此时,可按如下操作为 ...
- 高效的SQL分页存储过程
CREATE PROCEDURE SP_CommonPageList @Fields VARCHAR(500), @From VARCHAR(1000), @Condition VARCHAR(100 ...
- css基础之 font的简写规则 以及 自定义 CSS3 @font-face详细用法
Part 1 font简写 CSS的命名规则是用英文字母 数字 和下划线(一般用小写)来命名.简写css font的好处有三:一是写起来方便(就像键盘快捷键):二是简化代码:三是帮助你熟悉和深刻理解c ...
- 日志管理-将Log4net的配置配置到的独立文件中
转自:http://www.cnblogs.com/zfanlong1314/p/3662679.html使用log4net已经很久了.但从来没有详情了解log4的参数,及具体使用方法.看了周公的博客 ...
- python成长之路第三篇(1)_初识函数
目录: 函数 为什么要使用函数 什么是函数 函数的返回值 文档化函数 函数传参数 文件操作(二) 1.文件操作的步骤 2.文件的内置方法 函数: 一.为什么要使用函数 在日常写代码中,我们会发现有很多 ...
- Elevator(hdoj 1008)
Problem Description The highest building in our city has only one elevator. A request list is made u ...
- C语言基础07
结构体与函数的区别: 1.函数是由相同数据类型的变量组成. 2.结构体可以有不同数据类型组合.可以包含char,int,float,数组等类型. struct 结构名称 { 数据类型 成员: 注意 ...
- CodeForces 187A Permutations
反向思维,先求数组中不用处理的元素个数,再用n减去这个数,得到结果. #include <iostream> #include <cstring> #define maxn 2 ...
- javascript的层次
1.功能api 2.代码organization 3.performance 4.work flow
- javascript第十八课:windowd对象的方法
window.confirm('确定删除吗?'); //当用户点击一个按钮出发一个事件的时候,弹出一个提示框让网友确认,返回一个bool值,点确定的话,返回true,点取消,返回flase windo ...