Mysql数据库大文本数据处理

数据库大文本数据处理
    目标:把 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--1B256B

clob

216-1B64K

mediumclob

224-1B16M

longclob

232-1B4G

    但是,在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,
          filename   VARCHAR(100),
          data       MEDIUMBLOB
        );

  还有一种方法,就是把要存储的数据包装成Blob类型,然后调用PreparedStatement的setBlob()方法来设置数据
    代码如下:
        package cn.itcast.demo4;
        主要的包
        import java.sql.Blob;
        import javax.sql.rowset.serial.SerialBlob;
        import org.apache.commons.io.IOUtils;
        import cn.itcast.demo3.JdbcUtils;
    
        /**
        * 大文本数据
        */
        public class Demo4 {
    
            // 把mp3保存到数据库中。
            @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
            */
            @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);
                }
            }
        }

你可能感兴趣的:(Java基础)