MySQL数据库 写入大量数据如何实现

MySQL数据库 写入大量数据如何实现,第1张

//最快的方法 10000记录 23MS

public static void insert() {  

        // 开时时间  

        Long begin = new Date().getTime()  

        // sql前缀  

        String prefix = "INSERT INTO tb_big_data (count, create_time, random) VALUES "  

        try {  

            // 保存sql后缀  

            StringBuffer suffix = new StringBuffer()  

            // 设置事务为非自动提交  

            conn.setAutoCommit(false)  

            // Statement st = conn.createStatement()  

            // 比起st,pst会更好些  

            PreparedStatement pst = conn.prepareStatement("")  

            // 外层循环,总提交事务次数  

            for (int i = 1 i <= 100 i++) {  

                // 第次提交步长  

                for (int j = 1 j <= 10000 j++) {  

                    // 构建sql后缀  

                    suffix.append("(" + j * i + ", SYSDATE(), " + i * j  

                            * Math.random() + "),")  

                }  

                // 构建完整sql  

                String sql = prefix + suffix.substring(0, suffix.length() - 1)  

                // 添加执行sql  

                pst.addBatch(sql)  

                // 执行 *** 作  

                pst.executeBatch()  

                // 提交事务  

                conn.commit()  

                // 清空上一次添加的数据  

                suffix = new StringBuffer()  

            }  

            // 头等连接  

            pst.close()  

            conn.close()  

        } catch (SQLException e) {  

            e.printStackTrace()  

        }  

        // 结束时间  

        Long end = new Date().getTime()  

        // 耗时  

        System.out.println("cast : " + (end - begin) / 1000 + " ms")  

    }

方法一,从已有大数据表中检索大量数据插入到目标表里

方法二,编写存储过程,利用循环向数据表中插入大量的固定或有规律变化或随机变化的虚拟数据

方法三,通过应用程序端编程向目标表插入大量的数据,手法与方法二类似。

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)

           }    

       }

   }


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6166824.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-17
下一篇 2023-03-17

发表评论

登录后才能评论

评论列表(0条)

保存