转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5861959.html

使用JDBC连接数据库时,如果插入的数据量大,一条一条地插入数据会变得非常缓慢。此时,我们需要用到预处理。

查阅Java开发文档,我们可以看到:

接口 PreparedStatement

表示预编译的 SQL 语句的对象。

SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。

我的理解是,preparedstatement对象相当于sql语句执行前的一个加工站,对sql语句进行具体的数据填充。

大概的使用流程是:

1:使用BufferedString构建一个同时插入N条数据的语句模版;

2:利用模版生成字符串语句,将该语句作为参数构建一个PreparedStatement对象pst,意指用pst对参数语句进行预处理;

3:用pst对象调用方法对参数语句进行预处理:pst.setXX(index,value)等语句把参数语句进行具体的数据填充;

4:执行经过pst处理过后的具体sql语句:pst.execute();

5:关闭pst对象;

画图理解:

代码示例:

import java.net.*;
import java.io.*;
import java.sql.*; public class Insert
{ public static void main(String[] args)
{ Connection conn=null;
try{
Class.forName("com.mysql.jdbc.Driver");
conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/inserttest","root","123456");
conn.setAutoCommit(false); //使用缓冲字符串构造一个同时插入10000条数据的语句模版
StringBuffer sqlBuffer = new StringBuffer(
"insert into test (Col1,Col2,Col3) values");
sqlBuffer.append("(?,?,?)");
for (int j = 2; j <= 10000; j++) {
sqlBuffer.append(",(?,?,?)");
}
sqlBuffer.append(";");
String sql = new String(sqlBuffer); //SQL语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。在使用该语句时可以根据下标自行更改具体数据
PreparedStatement pst = conn.prepareStatement(sql);
System.out.println("start!");
Long beginTime = System.currentTimeMillis();
for (int i = 0; i < 100; i++) {
System.out.println("No."+(i+1)+"round...");
for (int j = 0; j < 10000; j++) {
//每次插入时,具体的数据通过pst.setXXX(index,value)来赋值
pst.setInt(3 * j + 1, (int) (Math.random() * 11)+1);
pst.setInt(3 * j + 2, (int) (Math.random() * 112)+2);
pst.setInt(3 * j + 3, (int) (Math.random() * 133)+5);
}
//每条sql语句插入10000条数据,执行100条sql
pst.execute();
}
conn.commit();
pst.close();
Long endTime = System.currentTimeMillis();
System.out.println("end!");
System.out.println("total time: " + (double) (endTime - beginTime)/1000 + " s");
System.out.println();
}catch(Exception ex){ }
}
}

【JDBC】Mysql海量数据插入——PreparedStatement加快数据插入的更多相关文章

  1. (MariaDB/MySQL)之DML(1):数据插入

    本文目录: 1.insert和replace插入数据 1.1 insert into values() 1.2 insert into set 1.3 insert into select_state ...

  2. JDBC mysql 中文查询不到数据解决

    问题现象: Selenium自动测试中,使用JDBC查询mysql数据库中数据,查询条件为中文,例如: select * from XXX where name ='我是测试数据'; 查询结果为空:但 ...

  3. MySQL基本SQL语句之数据插入、删除数据和更新数据

    一.INSERT插入数据: 方法一:批量插入 基本语法: INSERT INTO tb_name (col1, col2, ...) VALUES (val1, val2, ...)[,(val1, ...

  4. python+mysql:实现一千万条数据插入数据库

    作业要求 构建一个关系模式和课本中的关系movies(title,year,length,movietype,studioname,producerC)一样的关系,名称自定,在这个关系中插入1000万 ...

  5. Mysql 一个表中的数据插入另一个表中

    两张表的字段一致,并且插入全部数据 INSERT INTO  目标表  SELECT  * FROM  来源表 ; 例如,要将 articles 表插入到 newArticles 表中,则可以通过如下 ...

  6. mysql 从一个表查询数据插入另一个表或当前表

    mysql insert into 表明(uid,lng,lat) SELECT uuid,lng,lat FROM 表明

  7. mysql 一张表的数据插入另一张表的sql语句

    1. 表结构完全一样 insert into 表1 select * from 表2 2. 表结构不一样(这种情况下得指定列名) insert into 表(列名1,列名2,列名3) select 列 ...

  8. 解决hibernate只能插入一条数据的问题

    hibernate初学,根据视频教程写好代码后,发现无论执行多少次main函数,数据库中只有一条数据,尝试多次,后来终于发现问题... 使用的工具是:MYSQL 5.7.13   eclipse 4. ...

  9. .NET 百万级 大数据插入、更新 ,支持多种数据库

    功能介绍  (需要版本5.0.44) 大数据操作ORM性能瓶颈在实体转换上面,并且不能使用常规的Sql去实现 当列越多转换越慢,SqlSugar将转换性能做到极致,并且采用数据库最佳API 操作数据库 ...

随机推荐

  1. 每天一个linux命令-用户之间切换

    怎么从root用户切换到普通用户 su是在用户间切换,可以是从普通用户切换到root用户,也可以是从root用户切换到普通用户.如果当前是root用户,那么切换成普通用户test用以下命令:su - ...

  2. svn导出文件进行比较

    之前有介绍svn log 的命令,即可导出版本A~B之间所有的修改动作,然后复制出相应的文件(中间有一个算法去处理每一个动作,然后得到最终需要导出的文件列表,svn常用动作有:Modified.Add ...

  3. ios之快速领会VFL的demo

    在网上看到一篇blog,超正!快速领会ios的vfl.  这里贴上blog的地址. http://www.thinkandbuild.it/learn-to-love-auto-layout-prog ...

  4. libgdx 环境搭建

    1:环境搭建: (1)首先进入官网,http://libgdx.badlogicgames.com/download.html  点击下方的Releases.进行下载最新的版本号就可以. 这个为我们开 ...

  5. ExtJS 4.2 教程-05:客户端代理(proxy)

    转载自起飞网,原文地址:http://www.qeefee.com/extjs-course-5-client-proxy ExtJS 4.2 教程-01:Hello ExtJS ExtJS 4.2 ...

  6. Asp.Net Core发布绑定域名和端口

    一.WebHostBuilder配置URL和端口进行侦听 UseUrls() 1.默认的ASP.NET Core项目绑定http://localhost:5000.通过使用UseUrls扩展方法——编 ...

  7. SVG.js 引用获取整理

    一.SVG.get() 根据id获取元素 var draw = SVG('svg1').size(300, 300); var circle = draw.circle(50); circle.fil ...

  8. 模型标准化——预测模型标记语言(PMML)

    https://www.cnblogs.com/pinard/p/9220199.html 在机器学习用于产品的时候,我们经常会遇到跨平台的问题.比如我们用Python基于一系列的机器学习库训练了一个 ...

  9. Hadoop集群WordCount运行详解(转)

    原文链接:Hadoop集群(第6期)_WordCount运行详解 1.MapReduce理论简介 1.1 MapReduce编程模型 MapReduce采用"分而治之"的思想,把对 ...

  10. 【BLE】CC2541之发现服务与特征值

    一.简介 本文以SimpleBLECentral工程为例,解析CC2541作为主机时是如何发现从机的服务和特征值的. 二.实验平台 协议栈版本:BLE-CC254x-1.4.0 编译软件:IAR 8. ...