用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();
        }
    }
时间: 2024-10-20 03:19:26

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

运用PDO存储将图片、音频文件存入数据库

在数据库中创建表格的时候,有一个字段为image,用来保存图片,那么其类型就是blob,关于blob,百度百科是这样描述的 BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器. 在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型. BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传.下载或者存放到一个数据库). 根据Eric Raymond的说法,处理BLOB的主要思想就是

文件存入数据库

function ajaxFileUpload() {            var File_box = document.getElementById('Download_file');            //var extend = File_box.value.substring(File_box.value.lastIndexOf(".") + 1);            if (File_box.value == "" || File_box.va

python删除指定文件夹下小于100k的文件

例:代码保存为del100k.py 1 import os 2 3 def get_path(file_path): 4 for root, dirs, files in os.walk(file_path): 5 for file in files: 6 filename = os.path.join(root, file) 7 del_file(filename) 8 9 def del_file(filename): 10 size = os.path.getsize(filename)

使用lsof回复误删日志文件或数据库

查找谁在使用文件系统 在卸载文件系统时,如果该文件系统中有任何打开的文件,操作通常将会失败.那么通过lsof可以找出那些进程在使用当前要卸载的文件系统,如下: # lsof /GTES11/ COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME bash 4208 root cwd DIR 3,1 4096 2 /GTES11/ vim 4230 root cwd DIR 3,1 4096 2 /GTES11/ 在这个示例中,用户root正在其/GTES1

解析Excel文件并把数据存入数据库

前段时间做一个小项目,为了同时存储多条数据,其中有一个功能是解析Excel并把其中的数据存入对应数据库中.花了两天时间,不过一天多是因为用了"upload"关键字作为URL从而导致总报同一个错,最后在同学的帮助下顺利解决,下面我把自己用"POI"解析的方法总结出来供大家参考(我用的是SpingMVC和hibernate框架). 1.web.xml中的配置文件 web.xml中的配置文件就按照这种方式写,只需要把"application.xml"换

springMVC+spring+hibernate注解上传文件到数据库,下载,多文件上传

数据库 CREATE TABLE `annex` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `realName` varchar(36) DEFAULT NULL, `fileContent` mediumblob, `handId` bigint(20) DEFAULT NULL, `customerId` bigint(20) DEFAULT NULL, PRIMARY KEY (`id`), KEY `fk_id` (`handId`), CON

asp.net FileUpload 控件上传文件 以二进制的形式存入数据库

图片上传事件代码如下所示: 1 byte[] binary = upload.FileBytes; 2 StringBuilder sqlStrSb = new StringBuilder(); 3 sqlStrSb.Append("update info set Thumb=?Imgwhere Id=200"); 4 string mySqlConStr = "Host=localhost; uid=root; pwd=123; DataBase=db"; 5 M

java批量读取多个文件并存入数据库

文件中的数据量大,想要入库,统计分析: 代码如图: package com.mobile.web.api; import com.mobile.commons.JsonResp; import com.mobile.model.LogInfo; import com.mobile.service.LogInfoService; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import o

上传文件到数据库和服务器

上传文件我们需要做三步. ①在页面中能选择文件上传: ②能够将二进制数据转为byte数组,然后存入数据库中,注意数据库字段的类型: ③将文件保存到服务器. @RequestMapping(value = "/upload") public void upload(UpLoadFile uploadFile) throws Exception { String msg = "上传成功!"; String originalFilename = uploadFile.ge