• 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();
    		}		
    	}
    }



     

  • 相关阅读:
    nice -n 10 bash 和 chrt 10 bash 和 echo -17 > /proc/PID/oom_score_adj
    使用NGINX+LUA实现WAF功能 和nginx 防盗链
    hdfs 通过命令坏块监测和删除或者地址获取参数做监控
    kafka 的server.properties
    ntpd服务
    kafka笔记博客
    k8s高可用
    K8S集群Master高可用实践
    String:字符串常量池
    如何设计出优秀的Restful API?
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/6831968.html
Copyright © 2020-2023  润新知