大資料-將MP3儲存到資料庫並讀取出來《黑馬程式員_超全面的JavaWeb視頻教程vedio》day17

來源:互聯網
上載者:User

標籤:javaweb   commons   logs   輸出資料流   jdbcutil   height   lib   next   語句   

黑馬程式員_超全面的JavaWeb視頻教程vedio\黑馬程式員_超全面的JavaWeb教程-源碼筆記\JavaWeb視頻教程_day17-資料源碼\day17_code\day17_1\

大資料

目標:把mp3儲存到資料庫中!

在my.ini中添加如下配置!

max_allowed_packet=10485760

1 什麼是大資料

所謂大資料,就是大的位元組資料,或大的字元資料。標準SQL中提供了如下類型來儲存大資料類型:

類型

長度

tinyblob

28--1B(256B)

blob

216-1B(64K)

mediumblob

224-1B(16M)

longblob

232-1B(4G)

tinyclob

28--1B(256B)

clob

216-1B(64K)

mediumclob

224-1B(16M)

longclob

232-1B(4G)

 

但是,在mysql中沒有提供tinyclob、clob、mediumclob、longclob四種類型,而是使用如下四種類型來處理文本大資料:

類型

長度

tinytext

28--1B(256B)

text

216-1B(64K)

mediumtext

224-1B(16M)

longtext

232-1B(4G)

首先我們需要建立一張表,表中要有一個mediumblob(16M)類型的欄位。

 

CREATE TABLE tab_bin(id INT PRIMARY KEY AUTO_INCREMENT,filenameVARCHAR(100),data MEDIUMBLOB);

 向資料庫插入位元據需要使用PreparedStatement為原setBinaryStream(int, InputSteam)方法來完成。

con = JdbcUtils.getConnection();

String sql = "insert into tab_bin(filename,data) values(?, ?)";

pstmt = con.prepareStatement(sql);

pstmt.setString(1, "a.jpg");

InputStream in = new FileInputStream("f:\\a.jpg");

pstmt.setBinaryStream(2, in);

pstmt.executeUpdate();

 讀取位元據,需要在查詢後使用ResultSet類的getBinaryStream()方法來擷取輸入資料流對象。也就是說,PreparedStatement有setXXX(),那麼ResultSet就有getXXX()。

con = JdbcUtils.getConnection();

String sql = "select filename,data from tab_bin where id=?";

pstmt = con.prepareStatement(sql);

pstmt.setInt(1, 1);

rs = pstmt.executeQuery();

rs.next();

 

String filename = rs.getString("filename");

OutputStream out = new FileOutputStream("F:\\" + filename);

 

InputStream in = rs.getBinaryStream("data");

IOUtils.copy(in, out);

out.close();

   還有一種方法,就是把要儲存的資料封裝成Blob類型,然後調用PreparedStatement的setBlob()方法來設定資料

con = JdbcUtils.getConnection();

String sql = "insert into tab_bin(filename,data) values(?, ?)";

pstmt = con.prepareStatement(sql);

pstmt.setString(1, "a.jpg");

File file = new File("f:\\a.jpg");

byte[] datas = FileUtils.getBytes(file);//擷取檔案中的資料

Blob blob = new SerialBlob(datas);//建立Blob對象

pstmt.setBlob(2, blob);//設定Blob類型的參數

pstmt.executeUpdate();

con = JdbcUtils.getConnection();

String sql = "select filename,data from tab_bin where id=?";

pstmt = con.prepareStatement(sql);

pstmt.setInt(1, 1);

rs = pstmt.executeQuery();

rs.next();

 

String filename = rs.getString("filename");

File file = new File("F:\\" + filename) ;

Blob blob = rs.getBlob("data");

byte[] datas = blob.getBytes(0, (int)file.length());

FileUtils.writeByteArrayToFile(file, datas);

上課老師敲的代碼:

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);        }    }}

 

大資料-將MP3儲存到資料庫並讀取出來《黑馬程式員_超全面的JavaWeb視頻教程vedio》day17

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.