数据库表如下:

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)的更多相关文章

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

    转自:https://www.ibm.com/developerworks/cn/java/j-lo-spring-lob/index.html 概述 LOB 代表大对象数据,包括 BLOB 和 CL ...

  2. Statement和PreparedStatement的特点 MySQL数据库分页 存取大对象 批处理 获取数据库主键值

    1 Statement和PreparedStatement的特点   a)对于创建和删除表或数据库,我们可以使用executeUpdate(),该方法返回0,表示未影向表中任何记录   b)对于创建和 ...

  3. [转帖]Oracle数据库lob大对象数据类型字段总结,值得收藏

    Oracle数据库lob大对象数据类型字段总结,值得收藏 原创 波波说运维 2019-07-11 00:02:00 https://www.toutiao.com/i67108943269703357 ...

  4. oracle对大对象类型操作:blob,clob,nclob

     1.基本介绍 Oracle和plsql都支持lob(large object) 类型,用来存储大数量数据,如图像文件,声音文件等.Oracle 9i realse2支持存储最大为4g的数据,or ...

  5. Hibernate的大对象映射

    1在持久类中直接声明是java.sql.Blob类型 2在.hbm.xml文件中配置一下信息 <!-- 映射大对象 (就是字符长度超过255和图片想转换成二进制的数据)--> <!- ...

  6. Oracle数据类型clob和blob

    clob(size)变长 字符型大对象,最大8tb 应用场景:如果varchar2不够用了使用clob blob(size)变长 二进制数据,可以存放图片声音 8tb 但是,实际工作中很少把图片和声音 ...

  7. [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. hibernate 大对象类型hibernate制图

    基础知识: 在 Java 在, java.lang.String 它可以用来表示长串(超过长度 255), 字节数组 byte[] 可用于存放图片或文件的二进制数据. 此外, 在 JDBC API 中 ...

  9. Oracle数据库中的大对象(LOB)数据类型介绍

    一.LOB数据类型的介绍 大对象(LOB)数据类型允许我们保存和操作非结构化和半结构化数据,如文档.图形图像.视频片段.声音文件和XML文件等.DMBS_LOB 包被设计用于操作 LOB 数据类型.从 ...

随机推荐

  1. js判断是否安装flash

    <script type="text/javascript"> (function () { var noFlash = "你的浏览器没有安装Flash,会影 ...

  2. linq读书笔记3-操作符之select与selectmany

    linq对数据的查询方式的表达形式主要有两种: var demo =from p in pList where p.id=*** select p; var demo =pList.where(p=& ...

  3. C++标准库之泛型算法

    本文中算法都是指泛型算法. 基本要点: 1)算法使用迭代器进行操作. 2)不依赖容器,但容器希望使用算法,就必须提供接口. 3)通用算法永远不会执行容器操作.操作仅指:更改容器大小的操作.但,容器内部 ...

  4. IE9以下通过css让html页面背景图片铺满整个屏幕

    第一种方法不设为背景图片,通过css来控制样式,可兼容到IE6,代码如下: <!DOCTYPE html> <html lang="en"> <hea ...

  5. spring下配置dbcp,c3p0,proxool[转]

    不管通过何种持久化技术,都必须通过数据连接访问数据库,在Spring中,数据连接是通过数据源获得的.在以往的应用中,数据源一般是Web应用服务器提供的.在Spring中,你不但可以通过JNDI获取应用 ...

  6. JVM虚拟机选项:Xms Xmx PermSize MaxPermSize区别

    java虽然是自动回收内存,但是应用程序,尤其服务器程序最好根据业务情况指明内存分配限制.否则可能导致应用程序宕掉. 举例说明含义:-Xms128m 表示JVM Heap(堆内存)最小尺寸128MB, ...

  7. 纯CSS3技术 加载中

    你能相信吗?这些都是由一个DIV元素实现的动画,纯CSS3技术 html  <div class="loader">加载中...</div> css: 图( ...

  8. Bootstrap+Thinkphp3.2+Auth认证+jquery-validator后台

    Auth权限认证 本例采用auth权限认证,用户和用户组采用多对多关系处理,自动添加rule规则,带有jquery-validator插件,自动控制菜单显示或隐藏.   config.php中的配置 ...

  9. mysql各种日志对应的配置项

    01.error_log --log-error=<file_name> 02.general_log --general-log-file=<file_name> --gen ...

  10. 使用Hashtable和List结合拼json数据

    在做项目的时候,有时候需要向页面返回一个特定的json类型的数据,一般情况下会有下面的方法进行拼接: public String chongzhiList() throws Exception { L ...