码迷,mamicode.com
首页 > 数据库 > 详细

用hibernate把文件存入数据库(小于64k的文件)

时间:2017-08-22 21:47:09      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:输出   map   ebe   ide   factor   null   fileinput   es2017   输入流   

首先有e:\\a.jpg文件,小于64k

以下是javabean对象代码

public class fileBean {
    int id;
    byte[] file;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public byte[] getFile() {
        return file;
    }
    public void setFile(byte[] file) {
        this.file = file;
    }
    @Override
    public String toString() {
        return "fileBean [id=" + id + ", file=" + Arrays.toString(file) + "]";
    }
    
}

 ================================================================================

以下是映射配置文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.hibernate.file">
    
    <class name="fileBean" table="filetese">    
    <id name="id" type="int" column="id">
        <generator class="native"/>
    </id>    
        <property name="file" type="byte[]" length="5000000"/>

        
    </class>
    
</hibernate-mapping>

 

好像length这么大也没有什么用,还是只能插入64k的文件

◆tinyblob:仅255个字符 
◆blob:最大限制到65K字节 
◆mediumblob:限制到16M字节 
◆longblob:可达4GB  

 

 以下是数据库表结构

技术分享

 

以下是把图片文件放入数据库代码

    public void testIn() {
        org.hibernate.Transaction ts=null;
        Session sess = null;
        try {
            File file=new File("e:\\a.jpg");//创建文件图片对象
            FileInputStream in=new FileInputStream(file);//获取输入流
            byte[] inFile=new byte[in.available()];//输入流转为二进制
            in.read(inFile);//读入二进制
            in.close();//关闭流
            fileBean bean=new fileBean();
            bean.setFile(inFile);//设置二进制文件
            sess = sessionFactory.openSession();//打开会话
            ts=sess.beginTransaction();//开启事务
            sess.save(bean);//保存对象
            ts.commit();//提交事务
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("找不到文件");
            ts.rollback();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("IO异常");
            ts.rollback();
        }finally{
            sess.close();
        }
    }

 

===================================================

一下是将数据库中的图片资源输出代码

    public void testOut(){
        Session sess=sessionFactory.openSession();
        org.hibernate.Transaction ts=null;
        try {
            FileOutputStream out=new FileOutputStream("e:\\b.jpg");//获取输出流
            ts=sess.beginTransaction();
            fileBean bean=(fileBean) sess.get(fileBean.class, 2);
            ts.commit();
            out.write(bean.getFile());//写二进制文件
            out.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("找不到文件"+e.toString());
            ts.rollback();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("IO异常"+e.toString());
            ts.rollback();
        }finally{
            sess.close();
        }
    }

 

用hibernate把文件存入数据库(小于64k的文件)

标签:输出   map   ebe   ide   factor   null   fileinput   es2017   输入流   

原文地址:http://www.cnblogs.com/sovagxa/p/7413665.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!