`
IThead
  • 浏览: 421066 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java 大文件以二进制保存到数据库

    博客分类:
  • Java
阅读更多
一、创建表
oracle:

create table baoxiandan (
  id number(20) not null,
  fileName varchar2(200) not null,
  content blob,
  primary key(id)
  );
create sequence seq_baoxiandan;

二、Hibernate映射文件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.erry.tntops.acer.model.impl.CarrierImpl"
           table="BAOXIANDAN"
           proxy="com.erry.tntops.acer.model.Carrier">
        <id name="id" column="ID" type="long" unsaved-value="-1">
            <generator class="sequence">
                <param name="sequence">SEQ_BAOXIANDAN</param>
            </generator>
        </id>
        <property name="fileName" column="filename" type="java.lang.String" not-null="false">
            <meta attribute="caption">${tntops.acer.Carrier.code}</meta>
        </property>
        <property name="content" column="content" type="byte[]">
            <meta attribute="caption">${tntops.acer.Carrier.name}</meta>
        </property>
    </class>
</hibernate-mapping>

三、pojo类


import com.erry.tntops.common.model.impl.BaseModelImpl;
import com.erry.tntops.acer.model.Carrier;

import java.util.Date;

/**
* Created by IntelliJ IDEA.
* User: chenyang
* Date: 2008-7-28
* Time: 17:46:32
* To change this template use File | Settings | File Templates.
*/
public class CarrierImpl extends BaseModelImpl implements Carrier {

    private long id;
    private String fileName;
    private byte content[];

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public byte[] getContent() {
        return content;
    }

    public void setContent(byte[] content) {
        this.content = content;
    }
}

四、Java代码
1、入库
            //获得文件名,fileNamePath为文件路径变量
            String fileName = fileNamePath.substring(fileNamePath.lastIndexOf("\\") + 1);
            File file = new File(fileNamePath);
            InputStream inputStream = new FileInputStream(file);
            byte[] data = new byte[] {};
            data = inputStreamToByte(inputStream);//将文件保存到字节数组中
            Carrier carrier = (Carrier) SpringContext.getBeanOfType(Carrier.class);
            carrier.setFileName(fileName);
            carrier.setContent(data);
            dao.create(carrier);

//将文件保存到字节数组中
    private byte [] inputStreamToByte(InputStream is) throws IOException {
        ByteArrayOutputStream bAOutputStream = new ByteArrayOutputStream();
        int ch;
        while((ch = is.read() ) != -1){
            bAOutputStream.write(ch);
        }
        byte data [] =bAOutputStream.toByteArray();
        bAOutputStream.close();
        return data;
    }

2、出库
byte data [] = new byte[]{};
        File file =null ;
        FileOutputStream fos = null;
        InputStream in = null;

        String hql = "select carrier from com.erry.tntops.acer.model.Carrier carrier where carrier.fileName=:fileName";
        Map map = new HashMap();
        map.put("fileName", fileName);
        Collection collection =  dao.retrieve(hql, map);
        if(collection != null && collection.size() > 0){
            Iterator it = collection.iterator();
            Carrier carrier = (Carrier) it.next();
            data = carrier.getContent();

        }
//导出成文件
        file = new File("d:\\" + fileName);
        if (!file.exists()) {
            file.createNewFile(); // 如果文件不存在,则创建
        }
        fos = new FileOutputStream(file);
        int size = 0;
        if (data.length > 0) {
            fos.write(data, 0, data.length);
        } else {
            while ((size = in.read(data)) != -1) {
                fos.write(data, 0, size);
            }
            in.close();
        }
        fos.close();
分享到:
评论

相关推荐

    java保存文件到数据库

    将文件以二进制方式写入数据库,并将其读出还原。 数据库字段image

    图片二进制流保存到数据库

    /**/////根据图片文件的路径使用文件流打开,并保存为byte[] FileStream fs = new FileStream(imagepath, FileMode.Open);//可以是其他重载方法 byte[] byData = new byte[fs.Length]; fs.Read(byData, 0, ...

    实现数据库二进制流转换成图片保存本地

    将数据库中以二进制流的形式存储的图片,通过程序还原成图片保存在本地

    二进制XML存储方案

    二进制XML存储方案BinXML实现方法 BinXML是我个人杜撰出来的名字,不知道是否合适,也不知道是否已存在类似的解决方案。在vcer.net上我将前一段时间的这个BinXML方案贡献出来,希望能够与广大vcer分享。 当时问题的...

    java实现本地读取图片存储到数据库中并在html网页显示

    本地图片使用二进制流存储到MySQL中,然后响应前端的传参,查询后可以显示在HEML网页中,相当于图片的简单上传和显示

    如何将图片转换成二进制存储

    }好了,这样通过上面的方法就可以把图片转换成Byte[]对象,然后就把这个对象保存到数据库中去就实现了把图片的二进制格式保存到数据库中去了。下面我就谈谈如何把数据库中的图片读取出来,实际上这是一个相反的过程...

    binary-gRPC:使用java-gRPC框架和Google prob的二进制有效载荷通信系统的实现

    部分客户端消耗设备的RPC服务装置: 为客户端提供RPC服务将文件服务器实例保存为上载/更新/删除/下载Blob 文件服务器存放临时数据库文件服务二进制上传创建一个Blob 上载Blob 删除斑点二进制下载获取Blob信息获取...

    Java核心技术II(第8版)

    1.3 读入和写出二进制数据 1.3.1 随机访问文件 1.4 ZIP文档 1.5 对象流与序列化 1.5.1 理解对象序列化的文件格式 1.5.2 修改缺省的序列化机制 1.5.3 序列化单例和类型安全的枚举 1.5.4 版本管理 1.5.5 为克隆使用...

    java源码包---java 源码 大量 实例

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    基于java的企业级应用开发:文件上传和下载.ppt

    如果文件成功上传,服务器端程序会将上传的文件保存到指定的目录中,同时将文件的路径存入到数据库中。 一、文件上传 1.开发文件上传表单页面 在实现文件上传时,首先需要设置文件上传表单,这个表单的提交方式必须...

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    JAVA上百实例源码以及开源项目源代码

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java源码包4

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    JAVA文件编辑器程序代码.docx

    能够将读取到的文件内容以正确的格式在窗口中显示出来(二进制的显示成为十六进制数,ASCII码文件显示为字符串,图像文件显示出图像的内容); 能够同时用多个窗口打开多个文件,并能够对这多个窗口进行统一管理; ...

    java源码包3

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java源码包2

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系...

    kryo:Java二进制序列化和克隆:快速,高效,自动

    Kryo是用于Java的快速高效的二进制对象图序列化框架。 该项目的目标是高速,小尺寸和易于使用的API。 每当需要将对象持久保存到文件,数据库还是通过网络时,该项目都是有用的。 Kryo还可以执行自动的深层和浅层...

Global site tag (gtag.js) - Google Analytics