Fork me on GitHub

如何将大数据保存到 MySql 数据库

1. 什么是大数据

1. 所谓大数据, 就是大的字节数据,或大的字符数据.
2. 标准 SQL 中提供了如下类型来保存大数据类型:
  • 字节数据类型: tinyblob(256B), blob(64K), mediumblob(16M), longblob(4G)
  • 字符数据类型: tinyclob(256B), clob(64K), mediumclob(16M), longclob(4G)
3. MySql 中处理字符的数据类型名称与 SQL 标准不同:
  • 字符数据类型: tinytext(256B), text(64K), mediumtext(16M), longtext(4G)
// 示例: 把 mp3 保存到数据库中
// 需要在 MySql 配置文件中添加如下配置: `max_allowed_packet=10485760`
// 因为 MySql 默认不允许数据包传输过大

    public class Demo{

        // 将 mp3 文件保存到数据库中
        public void fun1(){

            // 获取连接对象
            Connection con = JdbcUtils.getConnection();

            // 提供 sql 模板, 获取 PreparedStatement 对象
            String sql = "INSERT INTO tab_bin VALUES(?,?,?)";
            PreparedStatement pstmt = con.prepareStatement(sql);

            // 设置 sql 模板参数
            pstmt.setInt(1,001);
            pstmt.setString(2,"hello.mp3");

            // mp3 保存为 blob 类型的数据
            // 通过 commons-io 工具类, 将 mp3 转换成 byte[]
            Byte[] bytes = IOUtils.toByteArray(new FileInputStream("/Users/姓名/Desktop/hello.mp3"));

            // 使用 bytes, 创建 Blob 对象
            Blob blob = new SerialBlob(bytes);
            pstmt.setBlob(3,blob);

            // 发送 sql 语句
            pstmt.executeUpdate();
        }


        // 从数据库中获取 mp3 数据
        public void fun2(){
            // 获取连接对象
            Connection con = JdbcUtils.getConnection();

            // 获取 PreparedStatement 对象
            String sql = "SELECT * FROM tab_bin";
            PreparedStatement pstmt = con.prepareStatement(sql);

            // 发送 sql 语句, 返回 ResultSet 对象
            ResultSet rs = pstmt.executeQuery();

            // 将 rs 中名为 data 列的数据
            if(rs.next()){
                    Blob blob = rs.getBlob("data");

                    // 把 blob 转换成硬盘上的 mp3 文件

                    // 1. 通过 blob 得到输入流对象
                    // 2. 自己创建输出流对象
                    // 3. 把输入流的数据写入到输出流中
                    InputStream in = blob.getBinaryStream();
                    OutputStream out = new FileOutputStream("/Users/姓名/Document/world.mp3");

                    // 使用工具类中的方法
                    IOUtils.copy(in,out);
            }    
        }
    }

参考资料:

posted @ 2017-10-02 13:01  小a的软件思考  阅读(4073)  评论(0编辑  收藏  举报