首先看数据库。数据库中新建一个BlobTable表,表中有两个字段,一个id(主键)一个picture字段是Blob类型字段。然后使用Hibernate向该数据库中写入和读取数据

在POJO类中picture属性用的是Blob类型数据。

以下看操作源代码

package dao;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.sql.Blob; import org.hibernate.LobHelper;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction; import Factory.HibernateSessionFactory;
import entity.Blobtable; public class BlobDao { private Session session = null;
private Transaction tran = null; public BlobDao(){
this.session = HibernateSessionFactory.getSession();
} public void saveBlob(Blobtable bigdate,String path) throws IOException{ /*InputStream in = this.getClass().getResourceAsStream(path);
byte[] bytes = new byte[in.available()];
in.read(bytes);
in.close();*/
File file = new File(path);
FileInputStream fis = new FileInputStream(file);
byte[] bytes = new byte[fis.available()];
fis.read(bytes);
LobHelper lh = session.getLobHelper();
bigdate.setPicture(lh.createBlob(bytes)); tran = session.beginTransaction();
try{
session.save(bigdate);
tran.commit();
System.out.println("插入成功! ");
}catch(Exception e){
System.out.println("插入失败!");
tran.rollback();
}finally{
HibernateSessionFactory.closeSession();
fis.close();
}
} public void getBlob(BigDecimal id,String targetpath) throws Exception{
String hql = "From Blobtable where id = ?";
Query query = session.createQuery(hql);
query.setBigDecimal(0, id);
Blobtable bt = (Blobtable) query.uniqueResult();
Blob image = bt.getPicture();
InputStream in = image.getBinaryStream();
OutputStream os = new FileOutputStream(targetpath);
int n = -1;
while((n=in.read())!=-1){
os.write(n);
}
in.close();
os.close(); }
}
package Test;

import java.io.IOException;
import java.math.BigDecimal; import dao.BlobDao;
import entity.Blobtable; public class Test {
public static void main(String[] args) { BlobDao bb = new BlobDao();
Blobtable bt = new Blobtable();
bt.setId(new BigDecimal(5));
try {
String path = "f:\\a.jpg";
bb.saveBlob(bt, path);
} catch (IOException e) {
e.printStackTrace();
}
BlobDao bd = new BlobDao();
try {
bd.getBlob(new BigDecimal(1), "e:\\a.jpg");
System.out.println("写出成功!");
} catch (Exception e) {
e.printStackTrace();
}
}
}

Hibernate操作Blob数据的更多相关文章

  1. panzer 电力项目十一--hibernate操作大文本字段Blob和Clob

    hibernate操作大文本字段Blob和Clob解决方案: 1.大文本字段Blob和Clob(流); 2.截串存取 第一步: 创建新表:Elec_CommonMsg_Content create t ...

  2. Hibernate保存Blob和Clob类型的数据

    虽然非常不建议在数据库中保存Blob和Clob类型的数据,但真的要有这样的需求呢?这里记录一下使用Hibernate如何向数据库中保存Blob和Clob数据. Oracle和MySql在Blob类型上 ...

  3. [oracle] Oracle存储过程里操作BLOB的字节数据的办法,例如写入32位整数

    作者: zyl910 一.缘由 BLOB是指二进制大对象,也就是英文Binary Large Object的缩写. 在很多时候,我们是通过其他编程语言(如Java)访问BLOB的字节数据,进行字节级的 ...

  4. Hibernate查询所有数据的操作

    Hibernate查询所有数据的操作方式有三种. 1.Query (1)使用该方法查询时,不需要编写sql语句,但是需要编写hql(Hibernate Query Language)语句,该语句是Hi ...

  5. 操作BLOB、CLOB、BFILE

    BFILE        二进制文件,存储在数据库外的操作系统文件,只读的.把此文件当二进制处理. BLOB        二进制大对象.存储在数据库里的大对象,一般是图像声音等文件. CLOB    ...

  6. C#实现MySQL数据库中的blob数据存储

    在MySQL数据库中,有一种blob数据类型,用来存储文件.C#编程语言操作MySQL数据库需要使用MySQL官方组件MySQL.Data.dll. Mysql.Data.dll(6.9.6)组件下载 ...

  7. oracle 在操作blob该字段是否会产生很多redo

    操作blob该字段是否会产生很多redo,答案是否定的.以下来做一个实验,測试数据库版本号是11.2.0.1.0: --创建一张表做測试之用 create table test_blob (   id ...

  8. hibernate操作数据库总结

    这篇文章用于总结hibernate操作数据库的各种方法 一.query方式 1.hibernate使用原生态的sql语句执行数据库查询 有些时候有些开发人员总觉得用hql语句不踏实,程序出现了错误,就 ...

  9. hibernate 操作 Postgresql 数据库报 operator does not exist: integer = character varying

    网上的说法如下: Java开发Postgresql 数据库兼容应用的问题,与Oracle有一些不同: Java类型映射数据库类型的不同,Oracle jdbc驱动程序处理Java String类型可正 ...

随机推荐

  1. luogu3376 【模板】网络最大流 dinic

    当前弧优化 #include <iostream> #include <cstring> #include <cstdio> #include <queue& ...

  2. Selenium WebDriver-操作页面下拉列表

    #encoding=utf-8 import unittest import time import chardet from selenium import webdriver class Visi ...

  3. 大数据学习——kettle的简单使用

    1 生成随机数保存到本地文件 新建转换--输入--生成随机数--输出--文本文件输出--保存到本地文件 2 在线预览生成结果 3 字段选择 4 增加常量 5 生成多条数据 右键生成随机数--改变开始复 ...

  4. 【Luogu】P3396哈希冲突(根号算法)

    题目链接 根号算法真的是博大精深啊……明明是暴力但复杂度就是能过 这也太强了吧!!! 预处理出p<=sqrt(n)的所有情况,耗时n根n 查询: 如果p<=根n,O1查表 如果p>= ...

  5. gcd-模板+最小公倍数

    #include<iostream> #include<cstdio> #include<algorithm> using namespace std; int G ...

  6. HDU——4162Shape Number(字符串的最小表示)

    Shape Number Time Limit: 24000/12000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  7. HDU——1799循环多少次(杨辉三角/动态规划/C(m,n)组合数)

    循环多少次? Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  8. 解决 Springboot中Interceptor拦截器中依赖注入失败

    问题: 在Springboot拦截器Interceptor中使用@Resource依赖注入时,发现运行的时候被注解的对象居然是null,没被注入进去 原配置为: @Configurationpubli ...

  9. springboot获取getBean方法以及ApplicationContext空指针问题解决

    创建获取ApplicationContext工具类: package com.performancetest.common.utils; import org.springframework.bean ...

  10. el-select绑定值为对象时,报错[Vue warn]: <transition-group> children must be keyed: <ElTag>

    解决方法: <el-select v-model="syncParams.toSlaveList" multiple value-key="ip" pla ...