1. 程式人生 > >用hibernate把文件存入數據庫(小於64k的文件)

用hibernate把文件存入數據庫(小於64k的文件)

print rac except ktr nat sys this 關閉 package

首先有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的文件)