用hibernate把文件存入數據庫(小於64k的文件)
阿新 • • 發佈:2017-08-22
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的文件)