本文主要是介绍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();} }
}
这篇关于Hibernate操作Blob数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!