用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的文件)的主要内容,如果未能解决你的问题,请参考以下文章
如何用组态王软件把文本文件存入SQL server数据库?请高手指教!