有时候,我们使用数据库的时候,如何快速的添加测试数据到数据库中,做测试呢,添加100W 数据,如果使用工具的话可能很慢,这里我推荐大家使用 PreparedStatement 预编译 去进行操作:
单线程操作 ,测试 只需要 20秒 如果字段少的话,可以到几秒钟插入100w数据

 public static void main(String[] args) {

        long start = System.currentTimeMillis();
conn();
long end = System.currentTimeMillis();
System.out.println("耗时:" + (end - start)/1000 + "秒");
} public static void conn(){
//1.导入驱动jar包
//2.注册驱动(mysql5之后的驱动jar包可以省略注册驱动的步骤)
//Class.forName("com.mysql.jdbc.Driver");
//3.获取数据库连接对象
Connection conn = null;
PreparedStatement pstmt = null;
{
try {
//"&rewriteBatchedStatements=true",一次插入多条数据,只插入一次
conn = DriverManager.getConnection("jdbc:mysql://134.175.66.149:3306/test?" + "&rewriteBatchedStatements=true&serverTimezone=UTC","root","B5IWfkqW8uu36J");
//4.定义sql语句
String sql = "insert into user values(default,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
//5.获取执行sql的对象PreparedStatement
pstmt = conn.prepareStatement(sql);
//6.不断产生sql
for (int i = 0; i < 1000000; i++) {
pstmt.setString(1,(int)(Math.random()*1000000)+"");
pstmt.setString(2,(int)(Math.random()*1000000)+"");
pstmt.setString(3,(int)(Math.random()*1000000)+"");
pstmt.setString(4,(int)(Math.random()*1000000)+"");
pstmt.setString(5,(int)(Math.random()*1000000)+"");
pstmt.setString(6,(int)(Math.random()*1000000)+"");
pstmt.setString(7,(int)(Math.random()*1000000)+"");
pstmt.setString(8,(int)(Math.random()*1000000)+"");
pstmt.setString(9,(int)(Math.random()*1000000)+"");
pstmt.setString(10, DateUtil.now()); pstmt.setString(11,(int)(Math.random()*1000000)+"");
pstmt.setString(12,DateUtil.now());
pstmt.setString(13,(int)(Math.random()*1000000)+"");
pstmt.setString(14,(int)(Math.random()*1000000)+"");
pstmt.setString(15,(int)(Math.random()*1000000)+"");
pstmt.setString(16,(int)(Math.random()*1000000)+"");
pstmt.setString(17,(int)(Math.random()*1000000)+"");
pstmt.setString(18,(int)(Math.random()*1000000)+"");
pstmt.setString(19,(int)(Math.random()*1000000)+"");
pstmt.setString(20,(int)(Math.random()*1000000)+"");
pstmt.addBatch();
}
//7.往数据库插入一次数据
pstmt.executeBatch();
System.out.println("添加1000000条信息成功!"); } catch (SQLException e) {
e.printStackTrace();
} finally {
//8.释放资源
//避免空指针异常
if(pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
} if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
} }

如何快速的插入 100W数据到数据库,使用PreparedStatement 最快实现!的更多相关文章

  1. centos环境下输入命令不能有中文那么我怎么插入中文数据到数据库

    centos环境下输入命令不能有中文那么我怎么插入中文数据到数据库 如下图: 首先查看是否安装了中文语言支持组件 yum grouplist 没有的话安装 yum install Chinese Su ...

  2. .Net批量插入数据到SQLServer数据库,System.Data.SqlClient.SqlBulkCopy类批量插入大数据到数据库

    批量的的数据导入数据库中,尽量少的访问数据库,高性能的对数据库进行存储. 采用SqlBulkCopy来处理存储数据.SqlBulkCopy存储大批量的数据非常的高效,将内存中的数据表直接的一次性的存储 ...

  3. oracle 快速批量插入复杂数据的内容

    最近迷上一种批量插入的方法,一句sql解决,将需要插入的数据用with as 的方式查出来,不管多么复杂的sql,都可以用临时表的方式查出来,然后直接插入,这样代码更加清晰 流程也简单 insert ...

  4. 【MySQL】MySQL快速插入大量数据

    起源 在公司优化SQL遇到一个索引的问题,晚上回家想继续验证,无奈没有较多数据的表,于是,想造一些随机的数据,用于验证. 于是 于是动手写.由于自己不是MySQL能手,写得也不好.最后,插入的速度也不 ...

  5. net core天马行空系列-各大数据库快速批量插入数据方法汇总

    1.前言 hi,大家好,我是三合.我是怎么想起写一篇关于数据库快速批量插入的博客的呢?事情起源于我们工作中的一个需求,简单来说,就是有一个定时任务,从数据库里获取大量数据,在应用层面经过处理后再把结果 ...

  6. Sql Server数据库之通过SqlBulkCopy快速插入大量数据

    废话不多说,直接上代码 /// <summary> /// 海量数据插入方法 /// </summary> /// <param name="connectio ...

  7. [ios]利用alertView 插入数据都数据库。笔记

    利用alertView 插入数据都数据库 -(void)addItemToList { UIAlertView *alter=[[UIAlertViewalloc]initWithTitle:@&qu ...

  8. 关于从JSP页面插入数据到数据库中乱码问题的解决

    问题描述:最近我在写一个j2ee的留言板系统模块,遇到了一个非常让我头大的问题,当我从JSP页面输入数据后,通过hibernate中的业务逻辑类HQL语句把这个数据插入到本地的mysql数据库中,可是 ...

  9. java批量插入数据进数据库中

    方式1: for循环,每一次进行一次插入数据. 方式2: jdbc的preparedStatement的batch操作 PreparedStatement.addBatch(); ...... Pre ...

随机推荐

  1. Failed to start LSB 网络服务启动失败

    有些时候 VMare虚拟机挂起,重新运行后,XShell远程连接不上,检查VMare虚拟机,重启网卡会报错,查看日志,会有 Failed to start LSB .... CentOS7 会有一个网 ...

  2. Cron表达式在 定时执行专家 5.0 中的使用方式

    在<定时执行专家 V5.0>程序内部使用了包含 6 位的 Cron表达式,第一个字段(second)没有使用.程序内部一直 second 位是 0.在 Cron表达式的界面上可以设置 5位 ...

  3. BZOJ1001 狼抓兔子(网络流转最短路:对偶图)

    题意: 给一个如图形式的\(n*m\)的方格,从左上走到右下,给出边权,问分成两块所需的最小代价.\(n,m\leq1000\). 思路: 显然是个最小割,但是\(O(n^2m)\)的复杂度很高,虽然 ...

  4. mybatis(三)配置mapper.xml 的基本操作

    参考:https://www.cnblogs.com/wuzhenzhao/p/11101555.html XML 映射文件 本文参考mybatis中文官网进行学习总结:http://www.myba ...

  5. Pycharm+任务栏悬浮+docked mode

    先点下所想改变模式的模块, 然后: Window -> Activate tool window -> docked mode.

  6. <U+200B> for, Zero Width Space ❌

    <U+200B> for, Zero Width Space zsh, bash https://www.cnblogs.com/xgqfrms/p/14233264.html#47944 ...

  7. DRM & 音视频 & 防盗链

    DRM & 音视频 & 防盗链 DRM Digital Rights Management / 数字版权管理 https://en.wikipedia.org/wiki/Digital ...

  8. js var & let & const All In One

    js var & let & const All In One js var & let & const 区别对比 var let const 区别 是否存在 hois ...

  9. js 获取是否为闰年,以及各月的天数 & isLeapYear

    js 获取是否为闰年,以及各月的天数 calendar utils isLeapYear const isLeapYear = (year) => { return (year % 4 === ...

  10. c++ 去掉字符串首尾空格

    http://www.cplusplus.com/reference/regex/regex_replace/ #include <iostream> #include <regex ...