Hibernate操作Blob数据

 

首先看数据库。数据库中新建一个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();
		}
	}
}
时间: 2024-10-14 12:39:15

Hibernate操作Blob数据的相关文章

hibernate操作大文本字段Blob和Clob

hibernate操作大文本字段Blob和Clob解决方案: 1.大文本字段Blob和Clob(流); 2.截串存取 第一步: 创建新表:Elec_CommonMsg_Content create table Elec_CommonMsg_Content( comID varchar(50) not null primary key comment '主键ID', type char(2) null comment '判断站点运行和设备运行的标示', content varchar(5000)

求mybatis 对BLOB数据的操作以及base64格式的处理

原文:求mybatis 对BLOB数据的操作以及base64格式的处理 源代码下载地址:http://www.zuidaima.com/share/1550463715314688.htm 寻求一个从前台将图片转成base64格式,base64与BLOB的转换以及基于mybatis将BLOB数据插入数据库的范例.跪求! package com.zuidaima.mybatis; import java.io.ByteArrayOutputStream; import java.io.File;

hibernate 批量处理数据

批量处理数据是指在一个事务中处理大量数据. 在应用层进行批量操作, 主要有下面方式: 通过 Session 通过 HQL 通过 StatelessSession 通过 JDBC API(仅仅要会用这样的,其它作为了解) 通过 Session 来进行批量操作 Session 的 save() 及 update() 方法都会把处理的对象存放在自己的缓存中. 假设通过一个 Session 对象来处理大量持久化对象, 应该及时从缓存中清空已经处理完成而且不会再訪问的对象. 详细的做法是在处理完一个对象或

oracle 下操作blob字段是否会产生大量redo

操作blob字段是否会产生大量redo,答案是不会.以下来做一个实验,測试数据库版本号是11.2.0.1.0: --创建一张表做測试之用 create table test_blob ( id number, tupian blob ); import java.io.FileInputStream; import java.io.OutputStream; import java.sql.Connection; import java.sql.DriverManager; import jav

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

操作blob该字段是否会产生很多redo,答案是否定的.以下来做一个实验,測试数据库版本号是11.2.0.1.0: --创建一张表做測试之用 create table test_blob ( id number, tupian blob ); import java.io.FileInputStream; import java.io.OutputStream; import java.sql.Connection; import java.sql.DriverManager; import j

BLOB数据存储方案

BLOB 数据存储方案 介绍 本文旨在介绍在SQL Server中用于存储BLOB(Binary Large Object)数据的类型和方法,例如图像.声音和视频等.从SQL Server 2000的类型和方法一直到SQL Server 2012的FileTable类型. 什么是BLOB 在实际应用中,如Web站点中展示的产品图片,客户端软件中展示的一些电子文档如PDF.Power Point.甚至一些声音和视频.换句话说,不是文本.一种处理这些电子文档的方式是将它们上传到一个文件服务器,创建目

Hibernate动态修改数据设计

Hibernate动态修改数据 在dao层用可变数组 在xxx.hbm.xml中配置query标签,参数name就是queryName的名称 在service层中getTele没有执行queryName的方法,只能通过getSession获取当前session对象.通过for循环进行配置. 案例:修改密码 1. ajax发送请求到Action中进行修改密码. 2. Action是Controller层,控制层注意,尽量不要处理数据,把数据传递到service层去 2.1数据不要操作,传递数据到s

Hibernate上传数据到数据库,从数据库读取数据到本地模板代码

Hibernate上传数据到数据库: 1 //创建一个session对象 2 Session session1=HibernateTools.getSession(); 3 //Fenciresult数据库表所对应的实体类,生成实体类对象,操作数据库表 4 Fenciresult fenciresult=new Fenciresult(); 5 //设置数据库对应字段的值,主键若是自增模式,无需人为设置 6 fenciresult.setWord("@"); 7 fenciresult

使用ADO实现BLOB数据的存取 -- ADO开发实践之二

使用ADO实现BLOB数据的存取 -- ADO开发实践之二 http://www.360doc.com/content/11/0113/16/4780948_86256633.shtml 一.前言 在上一篇文章<>中我们详细介绍了ADO基本的操作方法,在实际的开发过程中我们常常需要存储较大的二进制数据对象,比如:图像.音频文件.或其它二进制数据,这些数据我们称之为二进制大对象BLOB(Binary Large Object),其存取的方式与普通数据有所区别.本文将介绍利用ADO在数据库中存取B