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

黑马程序员_超全面的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);
        }
    }
}
时间: 2024-10-25 06:12:52

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

(转)大数据量高并发的数据库优化与sql优化

大数据量高并发的数据库优化 一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. 在一个系统分析.设计阶段,因为数据量较小,负荷较低.我们往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时再来考虑提高系统性能则要花费更多的人力物力,而整个系统也不可避免的形成了一个打补丁工程. 所以在考虑整

探析大数据需求下的分布式数据库

一.前言 大数据技术从诞生到现在,已经经历了十几个年头.市场上早已不断有公司或机构,给广大金融从业者"洗脑"大数据未来的美好前景与趋势.随着用户对大数据理念与技术的不断深入了解,人们已经开始从理论探索转向对场景落地的寻找,让大数据在企业中落地并开花结果. 从大数据的管理和应用方向集中在两个领域.第一,大数据分析相关,针对海量数据的挖掘.复杂的分析计算:第二,在线数据操作,包括传统交易型操作以及海量数据的实时访问.大数据高并发查询操作.用户根据业务场景以及对数据处理结果的期望选择不同的大

[转]浅析大数据量高并发的数据库优化

链接:http://www.uml.org.cn/sjjm/201308264.asp 高并发数据库可以同时处理海量信息,应用范围很广.今天我们将讨论的是大数据量高并发的数据库优化,希望对大家有所帮助. 一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. 在一个系统分析.设计阶段,因为数据量较小,负荷较低.我们往往只注意到功能的实现,而很难注意到性

大数据量、高并发数据库的高性能、高可用性解决方案

大数据量.高并发数据库的高性能.高可用性解决方案: 1.拆表:大表拆小表(垂直拆,水平拆:分表,分区partition,分片sharding),可以在应用层实现,也可以在数据库层面实现一部分:提高系统性能. 2.分库:把表放到不同的数据库,这也是分布式数据库的基础:提高系统性能. 3.分布式:不同的数据库放到不同的服务器:提高系统性能. 4.集群:使用数据库复制等技术组建集群,实现读写分离.备份等:提高系统性能.可用性. 5.缓存:对常用的数据进行缓存.提高系统性能. 6.备份:主从库,快照,热

大数据量高并发的数据库优化详解(MSSQL)

转载自:http://www.jb51.net/article/71041.htm 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. 一.数据库结构的设计 在一个系统分析.设计阶段,因为数据量较小,负荷较低.我们往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时再来考虑提高系统性能则要花费更多的人力物力,而

黑马程序员:从2016互联网大会数据,看PHP语言发展潜力

2016(第十五届)中国互联网大会于6.21-23日在北京国际会议中心召开.作为汇聚顶级专家,紧扣行业脉搏,聚焦热点趋势的深度权威大会,互联网大会不仅会分析中国互联网行业的发展趋势,也会聚焦互联网技术的发展. 此次互联网大会,回顾了2015年中国互联网的发展.据大会转载的CNNIC数据显示,中国网民人数已经达到了6.8826亿,普及率达到了50.3%,仅在2015年,网民新增就达到3951万人. 面对网民规模的持续扩大,PHP语言在会有什么样发展?黑马程序员会给大家带来最独到的见解! 中国网民规

大数据量高并发的数据库优化

一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. 在一个系统分析.设计阶段,因为数据量较小,负荷较低.我们往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时再来考虑提高系统性能则要花费更多的人力物力,而整个系统也不可避免的形成了一个打补丁工程. 所以在考虑整个系统的流程的时候,我们必须

二进制数据将图片保存到数据库,并读取数据库二进制数据显示图片

一. 浏览图片 OpenFileDialog ofd = new OpenFileDialog();            ofd.InitialDirectory = @"E:\";            ofd.Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files(*.*)|*.*";            ofd.RestoreDirectory = true; if (ofd

大数据量高并发的数据库优化(转)

参考:http://www.cnblogs.com/chuncn/archive/2009/04/21/1440233.html 一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. 在一个系统分析.设计阶段,因为数据量较小,负荷较低.我们往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时