欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

Hibernate操作Blob数据

程序员文章站 2024-01-29 15:23:16
...

首先看数据库,数据库中新建一个BlobTable表,表中有两个字段,一个id(主键)一个picture字段是Blob类型字段。然后使用Hibernate向该数据库中写入和读取数据 在POJO类中picture属性用的是Blob类型数据。 下面看操作源码 package dao;import java.io.File;im

首先看数据库,数据库中新建一个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();
		}		
	}
}