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 檔案二進位制儲存資料庫

一、建立表 oracle: create table baoxiandan ( id number(20) not null, fileName varchar2(200) not null, content blob, primary key

smartupload實現 jsp頁面上傳檔案檔案二進位制形式儲存資料庫

<%@page import="com.sys.utils.DBConnection"%> <%@ page language="java" import="java.sql.*,com.jspsmart.upload.*"%> <jsp:us

將圖片檔案二進位制方式儲存和恢復

/** * 將圖片轉換成二進位制 * * @return */ static String getImageBinary() { BASE64Encoder encoder = new sun.misc.BASE64Encoder(); //本地圖片 Fil

php將圖片二進位制儲存到mysql資料庫並顯示

<?phpinclude('./conn.php');if ($_POST['submit']) {     if ($_FILES['image']['size']) {         $names = $_FILES['image']['name'];         $arr   = explo

java讀取檔案位元組流的形式讀取 然後轉化為位元組流陣列,最後經過SHA1加密生成返回16進位制字串存入資料庫

  //根據產品圖片的url返回產品圖片的位元組流陣列   public static final byte[] input2byte(String Url) throws IOException {    InputStream in = null;    ByteArrayOutputStream byt

JavaWeb實現圖片非同步上傳,在前臺展示,並二進位制儲存資料庫

通過(ajaxFileupload.js)提供的ajaxFileUpload方法,非同步上傳圖片,在後臺獲取並轉二進位制先存入session中,成功後返回圖片的id到ajax,並通過jQuery改變 img src的地址請求該圖片的二進位制資源。 二次上傳會覆蓋前一次儲存在

Java:檔案拆分工具

java大檔案拆分工具(過濾掉表頭) import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.

[Python除錯]Python寫入到csv檔案文字儲存長數字

解決方法:在需要儲存的數字後+’\t’即可. 在儲存到csv檔案然後用Excel開啟時,發現圖書ISBN顯示為科學計數法,如圖: import csv >>> writer = csv.writer(output) >>> writer.write

java 匯出 excel 最佳實踐,java 檔案 excel 避免OOM(記憶體溢位) exce

產品需求 產品經理需要匯出一個頁面的所有的資訊到 EXCEL 檔案。 需求分析 對於 excel 匯出,是一個很常見的需求。 最常見的解決方案就是使用 poi 直接同步匯出一個 excel 檔案。 客戶體驗 & 服務效能 客戶體驗 如果匯出的檔案比較大,比如幾十萬條資料,同步匯

java檔案讀寫操作,java nio 之MappedByteBuffer,高效檔案/記憶體對映

原文地址:https://www.cnblogs.com/lyftest/p/6564282.html   java處理大檔案,一般用BufferedReader,BufferedInputStream這類帶緩衝的Io類,不過如果檔案超大的話,更快的方式是採用MappedByteB

java 匯出 excel 最佳實踐,java 檔案 excel 避免OOM(記憶體溢位) excel 工具框架

產品需求 產品經理需要匯出一個頁面的所有的資訊到 EXCEL 檔案。 需求分析 對於 excel 匯出,是一個很常見的需求。 最常見的解決方案就是使用 poi 直接同步匯出一個 excel 檔案。 客戶體驗 & 服務效能 客戶體驗 如果匯出的檔案比較大,比如幾十萬條資料,同步匯

java檔案分塊上傳分享

    先說說大檔案上傳種用的點以及原理,也希望各位指正。    思路以及大部分原始碼來自於  haohao123naa博主,我只是在他的基礎上進行完善點選開啟連結,在此表示感謝。    1.檔案分塊:一個超過幾個G的檔案上傳到伺服器,如果你只使用最簡單上傳、接收、處理、還能

檔案儲存資料庫二進位制流的形式)

Hibernate方法 HibernateUtils.java package yang.fang.hibernate; import org.hibernate.Session; import org.hibernate.SessionFactory; import

C#將檔案上傳、下載(二進位制儲存資料庫

1、將檔案以二進位制流的格式寫入資料庫 首先獲得檔案路徑,然後將檔案以二進位制讀出儲存在一個二進位制陣列中,與資料庫建立連線,在SQL語句中將二進位制陣列賦值給相應的引數,完成向資料庫中寫入檔案的操作 /// 將檔案流寫入資料庫 /// </s

java使用poi把從資料庫中取出的資料寫入到excel檔案中並儲存到指定檔案路徑

  有時候我們要把從資料庫中取出的資料匯入到excel中,使取到的資料看起來更加的直觀和方便,在java中如何實現取到的資料匯入到excel中呢?以下就是使用poi工具吧資料寫入excel檔案中的解決方法: Excel表格副檔名有.xlsx和.xls兩種格式     &n

clob-資料庫存取文字檔案二進位制圖片

 將檔案中所有資料(即大文字)作為資料庫表某一列值存入: 程式碼涉及到IO及SQL的相關包: import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import j

檔案轉為二進位制儲存資料庫

資料庫在儲存資料時,有兩種格式,一種是以位元組儲存的,二進位制資料。 另一種是以字元形式儲存的。 資料庫要儲存二進位制資料,其資料庫的列的屬性必須是二進位制型別的,如MySQL中,型別為BINARY和VARBNARY的列以二進位制形式儲存資料。 因為二進位制一般都是位元組陣列,所

SQLserver C#將圖片二進位制方式儲存資料庫,再從資料庫讀出圖片

一 儲存到資料庫 1、建立資料表UserPhoto  userID為varchar(50)    設定為標識列unique不能重複   alter table UserPhoto add  unique(UserID) &n

檔案轉為二進位制儲存資料庫中的思路

資料庫在儲存資料時,有兩種格式,一種是以位元組儲存的,二進位制資料。 另一種是以字元形式儲存的。 資料庫要儲存二進位制資料,其資料庫的列的屬性必須是二進位制型別的,如MySQL中,型別為BINARY和VARBNARY的列以二進位制形式儲存資料。 因為二進位制一般

Flutter 如何二進位制的方式儲存檔案

本文將介紹如何將二進位制檔案儲存至指定路徑,已經通過測試,測試的過程為使用下文的方式將sqlite資料庫儲存至專案資料夾內,可以正常的通過sqflite使用 //flutter資源路徑,需要提前配置好,保證可用,路徑的最後要標註檔名與字尾,例如file.db String