数据库表如下:

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. 一个非常给力的播放器video-js

    video-js采用的是html5播放器. 在不支持html5的浏览器会自动切换成flash. video-js的官网http://www.videojs.com/ 看看下载的demo就知道个大概了. ...

  2. 将json格式日期(毫秒数)转成日常日期格式和日常格式时间对比

    第一:是把生成的Json格式的时间转换,注意要看清楚时间的格式 function (cellval) { var date = new Date(parseInt(cellval.replace(&q ...

  3. .NET Web开发之.NET MVC框架

    摘要:MVC是一种架构设计模式,该模式主要应用于图形化用户界面(GUI)应用程序.那么什么是MVC?MVC由三部分组成:Model(模型).View(视图)及Controller(控制器). MVC概 ...

  4. 由于jsp include 很多文件后导致java类大小超过65535 bytes 的解决方法(转载)

    昨天,我遇到了一個讓我很頭疼的問題. 我做了一個共通的jsp,單只測它是ok的,可是,放在別的jsp中include它,就會報錯如標題所示:The code of method _jspService ...

  5. MySql高效分页SQL

    public string GetQuerySql(ITSPAreaQueryModel model, object state = null) { ); sqlBuilder.AppendForma ...

  6. C++ 多态性浅谈

    多态:一个接口, 多种方法.程序在运行时才决定调用的函数是什么. C++多态通过 虚函数实现, 虚函数允许子类重新定义成员函数, 子类override父类. 多态与非多态的实质区别:函数地址是早绑定还 ...

  7. Leetcode 242 Valid Anagram pytyhon

    题目: Given two strings s and t, write a function to determine if t is an anagram of s. For example,s  ...

  8. 整数v,从高位到低位,取c位数,得到最大数 (其中:v>=10^c)

    题目如上,例子v=22312324,c=3,求得最大数为334. 用自己的想法实现了一遍,如果你有更好的方法的话,欢迎不吝赐教. 我的思路是,先将整数v按位存入一个数组,数组低位为整数高位,如num[ ...

  9. c语言 列出系统进程

    #include <stdio.h> #include "stdafx.h" #include <Windows.h> #include <strin ...

  10. 微软云基础架构Hyper-scale Datacenter

    每天醒来,可能很多人的习惯都是打开手机,看看微信,刷刷朋友圈,或者看看新闻,去咖啡店,打开电脑搜索一些关键字,观看视频,电视剧--可是你有没有想过你每一次键盘的敲击,每一次微信的语音的发送,数据会流向 ...