1. 程式人生 > >Javaweb 向Mysql資料庫存取二進位制檔案

Javaweb 向Mysql資料庫存取二進位制檔案

package cn.itcast.demo4;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.sql.rowset.serial.SerialBlob;

import org.apache.commons.io.IOUtils;
import org.junit.Test;

import cn.itcast.demo3.JdbcUtils;

/**
 * 大資料
 * @author cxf
 *
 */
public class Demo4 {
    /**
     * 把mp3儲存到資料庫中。
     * @throws SQLException
     * @throws IOException
     * @throws FileNotFoundException
     */
    @Test
    public void fun1() throws Exception {
        /*
         * 1. 得到Connection
         * 2. 給出sql模板,建立pstmt
         * 3. 設定sql模板中的引數
         * 4. 呼叫pstmt的executeUpdate()執行
         */
        Connection con = JdbcUtils.getConnection();
        String sql = "insert into tab_bin values(?,?,?)";
        PreparedStatement pstmt = con.prepareStatement(sql);
        
        pstmt.setInt(1, 1);
        pstmt.setString(2, "流光飛舞.mp3");
        /**
         * 需要得到Blob
         * 1. 我們有的是檔案,目標是Blob
         * 2. 先把檔案變成byte[]
         * 3. 再使用byte[]建立Blob
         */
        // 把檔案轉換成byte[]
        byte[] bytes = IOUtils.toByteArray(new FileInputStream("F:/流光飛舞.mp3"));
        // 使用byte[]建立Blob
        Blob blob = new SerialBlob(bytes);
        // 設定引數
        pstmt.setBlob(3, blob);
        
        pstmt.executeUpdate();
    }
    
    /**
     * 從資料庫讀取mp3
     * @throws SQLException
     */
    @Test
    public void fun2() throws Exception {
        /*
         * 1. 建立Connection
         */
        Connection con = JdbcUtils.getConnection();
        /*
         * 2. 給出select語句模板,建立pstmt
         */
        String sql = "select * from tab_bin";
        PreparedStatement pstmt = con.prepareStatement(sql);
        
        /*
         * 3. pstmt執行查詢,得到ResultSet
         */
        ResultSet rs = pstmt.executeQuery();
        
        /*
         * 4. 獲取rs中名為data的列資料
         */
        if(rs.next()) {
            Blob blob = rs.getBlob("data");
            /*
             * 把Blob變成硬碟上的檔案!
             */
            /*
             * 1. 通過Blob得到輸入流物件
             * 2. 自己建立輸出流物件
             * 3. 把輸入流的資料寫入到輸出流中
             */
            InputStream in = blob.getBinaryStream();
            OutputStream out = new FileOutputStream("c:/lgfw.mp3");
            IOUtils.copy(in, out);
        }
    }
}

資料庫表結構

CREATE TABLE tab_bin(

id    INT           PRIMARYKEY AUTO_INCREMENT,

filename  VARCHAR(100),

data        MEDIUMBLOB

);