美文网首页
Javaweb笔记(十二):大数据( 向mysql中存储音频·视

Javaweb笔记(十二):大数据( 向mysql中存储音频·视

作者: 睿丶清 | 来源:发表于2019-07-17 22:22 被阅读0次

所谓的数据库就是可以存放各种数据的一个大的集合,前边我们进行数据库的存储仅仅局限一些简单数据的存储,今天进行视频,音频这类大文件在数据库的存储:

mysql数据库数据类型:

在 MySQL 中,有三种主要的类型:文本、数字和日期/时间类型。

  • 字符串类型:
类型 大小 用途
CHAR 0-255字节 定长字符串
VARCHAR 0-65535 字节 变长字符串
TINYTEXT 0-255字节 短文本字符串
TEXT 0-65 535字节 长文本数据
MEDIUMTEXT 0-16 777 215字节 中等长度文本数据
LONGTEXT 0-4 294 967 295字节 极大文本数据
TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串
BLOB 0-65 535字节 二进制形式的长文本数据
MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据
LONGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据

BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。

有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。

  • 日期和时间类型
    表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
类型 大小(字节) 范围 格式 用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 1970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 YYYYMMDD HHMMSS 混合日期和时间值,时间戳
  • 数值类型
类型 大小(字节) 范围(有符号) 范围(无符号) 用途
TINYINT 1 字节 (-128,127) (0,255) 小整数值
SMALLINT 2字节 (-32 768,32 767) (0,65 535) 大整数值
MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值
INT或INTEGER 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
BIGINT 8节 (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
FLOAT 4 字节 (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度浮点数值
DOUBLE 8 字节 (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度浮点数值
DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值

现我们操作的是音频文件,一般的音频文件大小在5M左右,所以我们这里选用的数据类型是字符串类型中的MEDIUMBLOB;
创建表tb_media,且表结构为:

+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| filename | varchar(50) | YES  |     | NULL    |                |
| data     | mediumblob  | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

现我们将本地文件存储到数据库表tb_media中,代码实现如下:

    @Test
    public void saveMP3IntoDatabase() {
        String sql = "insert into tb_media values(?,?,?)";
        String fileUrl = "/Users/wujinli/Music/网易云音乐/Nightcore - Monsters.mp3";
        Connection connection = null;
        PreparedStatement pst = null;
        try {
            connection = JDBCUtils.getConnection();
            pst = connection.prepareStatement(sql);
            pst.setInt(1, 1);
            pst.setString(2, "Nightcore - Monsters");
            //SerialBlob是Blob的实现类 ;IOUtil是org.apache提供的工具类包
            SerialBlob serialBlob = new SerialBlob(IOUtils.toByteArray(new FileInputStream(fileUrl)));
            //存储大文本信息使用的方法setBlob
            pst.setBlob(3, serialBlob);
            pst.executeUpdate();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            JDBCUtils.closeConnection(null, pst, connection);
        }
    }

运行测试项目获取结果,查看数据库:


071701.png

可以看出数据存储成功,接下来我们可以针对数据库的数据存储到本地的操作:

/**
     * 将数据库的音频信息存储到本地
     */
    @Test
    public void getMediaFromDatabase() {
        Connection connection = null;
        //查询数据sql语句模版
        String sql = "SELECT * FROM tb_media";
        PreparedStatement pst = null;
        ResultSet rs = null;

        try {
            //获取数据库连接
            connection = JDBCUtils.getConnection();
            //获取操作数据库对象
            pst = connection.prepareStatement(sql);
            //查询数据库表tb_media中的数据
            rs = pst.executeQuery();
            //遍历获取数据
            if (rs.next()) {
                Blob blob = rs.getBlob("data");
                //使用工具类将获取的数据写到本地文件夹下
                IOUtils.copy(blob.getBinaryStream(),
                        new FileOutputStream("/Users/wujinli/Music/Nightcore - Monsters.mp3"));
            }
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            JDBCUtils.closeConnection(rs, pst, connection);
        }
    }

运行程序查看本地文件:


071702.png
071703.png

由此可以看出从数据库获取的信息存储本地文件成功!

相关文章

  • Javaweb笔记(十二):大数据( 向mysql中存储音频·视

    所谓的数据库就是可以存放各种数据的一个大的集合,前边我们进行数据库的存储仅仅局限一些简单数据的存储,今天进行视频,...

  • minio在docker下的安装与启动

    对于大量的图片、音频、视频等数据,我们不可能放在mysql这种关系型数据库中存储,minio是一种不错的大数据存储...

  • tushare连接mysql问题

    tushare数据存储到mysql官方示例: 在把数据存储到mysql中,碰到python连接mysql问题: 解...

  • 诉讼云实现技术

    数据采集(获取) 用户本地上传爬虫 数据存储 使用阿里云OSS,可以通过网络随时存储和调用包括文本、图片、音频和视...

  • MySQL存储引擎

    1、存储引擎简介 明确:MySQL数据存在磁盘文件中存储引擎:名词,主要用于声明MySQL表中数据的存储方式;不管...

  • 三、EL表达式和JSTL

    EL表达式和JSTL标签 在JavaWeb中,JSP技术提供9大内置对象,其中4个对象(四大作用域)用于存储数据,...

  • Media Data之多媒体数据库(一)数据库结构分析

    Android MediaProvider 使用 SQLite 数据库存储图片、视频、音频等多媒体文件的信息,供视...

  • MySQL之InnoDB和MyISAM存储引擎

    存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取。MySQL存储引擎有很多,不同的存...

  • A.001.3.Mysql存储引擎

    1.存储引擎的基本概念 2.MySQL 5.7 支持的存储引擎 3.MySQL数据库中的存储引擎 4.MySQL ...

  • 5.MySQL存储引擎

    MySQL存储引擎 什么是存储引擎MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技...

网友评论

      本文标题:Javaweb笔记(十二):大数据( 向mysql中存储音频·视

      本文链接:https://www.haomeiwen.com/subject/vaqhlctx.html