首页 > 代码库 > 大数据-将MP3保存到数据库并读取出来《黑马程序员_超全面的JavaWeb视频教程vedio》day17

大数据-将MP3保存到数据库并读取出来《黑马程序员_超全面的JavaWeb视频教程vedio》day17

黑马程序员_超全面的JavaWeb视频教程vedio\黑马程序员_超全面的JavaWeb教程-源码笔记\JavaWeb视频教程_day17-资料源码\day17_code\day17_1\

大数据

目标:把mp3保存到数据库中!

my.ini中添加如下配置!

max_allowed_packet=10485760

1 什么是大数据

所谓大数据,就是大的字节数据,或大的字符数据。标准SQL中提供了如下类型来保存大数据类型:

类型

长度

tinyblob

28--1B256B

blob

216-1B64K

mediumblob

224-1B16M

longblob

232-1B4G

tinyclob

28--1B256B

clob

216-1B64K

mediumclob

224-1B16M

longclob

232-1B4G

 

但是,在mysql中没有提供tinyclobclobmediumcloblongclob四种类型,而是使用如下四种类型来处理文本大数据:

类型

长度

tinytext

28--1B256B

text

216-1B64K

mediumtext

224-1B16M

longtext

232-1B4G

首先我们需要创建一张表,表中要有一个mediumblob16M)类型的字段。

 

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()方法来获取输入流对象。也就是说,PreparedStatementsetXXX(),那么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类型,然后调用PreparedStatementsetBlob()方法来设置数据

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