当前位置:Gxlcms > 数据库问题 > 用hibernate把文件存入数据库(小于64k的文件)

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

时间:2021-07-01 10:21:17 帮助过:17人阅读

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   输入流   

人气教程排行