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

Posted sovagxa&静默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用hibernate把文件存入数据库(小于64k的文件)相关的知识,希望对你有一定的参考价值。

首先有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的文件)的主要内容,如果未能解决你的问题,请参考以下文章

Python中把数据存入csv文件

如何用组态王软件把文本文件存入SQL server数据库?请高手指教!

关于JAVA~~~~ 如何将图片等大对象存入ORACLE中~~求详解!(代码)

向数据库中存入数据,中文乱码问题

Hibernate向数据库存入BLOB和CLOB类型的数据

sql查询出来的内容存入map,然后把他们遍历出来