目录

1.方式一:使用PreparedStatement

2.方式二:使用addBatch(),excuteBatch(),clearBatch()

3.方式三:设置不允许自动提交数据

4.总结


1.方式一:使用PreparedStatement

步骤

①获取连接。

②编写SQL语句。

③预编译SQL语句。

④填充占位符。

⑤执行SQL语句。

实例:创建数据表并包含一个int类型字段userid,并向其中添加2万条数据。

package lib;import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties;public class Test2 {public static void main(String []args) {InputStream is = null;Connection connection = null;try {//获取连接is = Test2.class.getClassLoader().getResourceAsStream("test.properties");Properties properties=new Properties();properties.load(is);String user=properties.getProperty("user");String password=properties.getProperty("password");String url=properties.getProperty("url");String driver=properties.getProperty("driver");Class.forName(driver);connection = DriverManager.getConnection(url, user, password);//删除旧表String sql="drop table test";PreparedStatement ps=connection.prepareStatement(sql);ps.execute();//创建新表sql="create table test (userid int)";ps=connection.prepareStatement(sql);ps.execute();//插入数据sql="insert into test values (?)";ps=connection.prepareStatement(sql);for(int i=1;i<=20000;i++) {ps.setObject(1, i);ps.execute();}} catch (Exception e) {e.printStackTrace();}//资源关闭try {connection.close();} catch (SQLException e) {e.printStackTrace();}try {is.close();} catch (IOException e) {e.printStackTrace();}}
}

2.方式二:使用addBatch(),excuteBatch(),clearBatch()

步骤

①获取连接。

②编写sq语句。

③预编译SQL语句。

④填充占位符。

⑤调用PreparedStatement对象的addBatch()攒SQL语句。

⑥调用PreparedStatement对象的excuteBatch()执行SQL语句。

⑦调用PreparedStatement对象的clearBatch()清空Batch。

注意点:

①上面的三个函数作用分别是:攒SQL语句、执行SQL语句、清空SQL语句。

②MySQL服务器默认是关闭批处理的,需要设置一个参数使MySQL支持批处理操作。做法:在配置文件中URL后面加上:?rewriteBatchedStatements=true

实例:同上

package lib;import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties;public class Test2 {public static void main(String []args) {InputStream is = null;Connection connection = null;try {//获取连接is = Test2.class.getClassLoader().getResourceAsStream("test.properties");Properties properties=new Properties();properties.load(is);String user=properties.getProperty("user");String password=properties.getProperty("password");String url=properties.getProperty("url");String driver=properties.getProperty("driver");Class.forName(driver);connection = DriverManager.getConnection(url, user, password);//删除旧表String sql="drop table test";PreparedStatement ps=connection.prepareStatement(sql);ps.execute();//创建新表sql="create table test (userid int)";ps=connection.prepareStatement(sql);ps.execute();//插入数据sql="insert into test values (?)";ps=connection.prepareStatement(sql);for(int i=1;i<=20000;i++) {ps.setObject(1, i);//攒SQL语句ps.addBatch();if(i%500==0) {//执行SQL语句ps.executeBatch();//清空SQL语句ps.clearBatch();}}} catch (Exception e) {e.printStackTrace();}//资源关闭try {connection.close();} catch (SQLException e) {e.printStackTrace();}try {is.close();} catch (IOException e) {e.printStackTrace();}}
}

3.方式三:设置不允许自动提交数据

步骤

同方式二,不过在获取连接之后要先调用Connection对象的setAutoCommit()方法将数据库的自动提交功能进行关闭,然后再所有数据写入完成以后再调用Connection对象的commit()方法来将数据进行统一提交

实例:同上

package lib;import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties;public class Test2 {public static void main(String []args) {InputStream is = null;Connection connection = null;try {//获取连接is = Test2.class.getClassLoader().getResourceAsStream("test.properties");Properties properties=new Properties();properties.load(is);String user=properties.getProperty("user");String password=properties.getProperty("password");String url=properties.getProperty("url");String driver=properties.getProperty("driver");Class.forName(driver);connection = DriverManager.getConnection(url, user, password);//关闭自动提交connection.setAutoCommit(false);//删除旧表String sql="drop table test";PreparedStatement ps=connection.prepareStatement(sql);ps.execute();//创建新表sql="create table test (userid int)";ps=connection.prepareStatement(sql);ps.execute();//插入数据sql="insert into test values (?)";ps=connection.prepareStatement(sql);long time=System.currentTimeMillis();for(int i=1;i<=1000000;i++) {ps.setObject(1, i);//攒SQL语句ps.addBatch();if(i%500==0) {//执行SQL语句ps.executeBatch();//清空SQL语句ps.clearBatch();}//提交数据if(i==1000000) {connection.commit();//恢复自动提交connection.setAutoCommit(true);}}System.out.println(System.currentTimeMillis()-time);} catch (Exception e) {e.printStackTrace();}//资源关闭try {connection.close();} catch (SQLException e) {e.printStackTrace();}try {is.close();} catch (IOException e) {e.printStackTrace();}}
}

4.总结

其实方式一前面还有一种方式是使用Statement类来进行批处理,但是由于PreparedStatement会进行预编译SQL语句,之后只要填充占位符即可,不用每次插入数据都进行SQL语句的声明,减少了内存开销和时间花费

在方式二中,使用addBatch()、excuteBatch()、clearBatch()三个方法来对SQL语句进行“攒起来”的操作,攒够一定量后再进行插入,减少了与数据库之间的交互次数,减少了插入的时间,提高效率。

方式三中,在获取连接以后,关闭数据库的自动提交功能,在最后一次添加数据后再将所有数据进行统一提交,减少了数据提交的次数,进而减少提交数据的时间,提高了效率。

JDBC进行批量插入数据操作相关推荐

  1. JDBC:批量插入数据操作

    批量插入操作 举例: 向数据表中插入20000条数据 数据库中提供一个goods表.创建如下: CREATE TABLE goods( id INT PRIMARY KEY AUTO_INCREMEN ...

  2. JDBC executeBatch批量插入数据

    JDBC executeBatch批量插入数据 JDBC executeBatch批量插入数据 JDBC executeBatch批量插入数据 con.setAutoCommit(false); 项目 ...

  3. Java JDBC批处理插入数据操作

    在此笔记里,我们将看到我们如何可以使用像Statement和PreparedStatement JDBC API来批量在任何数据库中插入数据.此外,我们将努力探索一些场景,如在内存不足时正常运行,以及 ...

  4. java jdbc 批处理_Java JDBC批处理插入数据操作

    在此笔记里,我们将看到我们如何可以使用像Statement和PreparedStatement JDBC API来批量在任何数据库中插入数据.此外,我们将努力探索一些场景,如在内存不足时正常运行,以及 ...

  5. 【JDBC】PreparedStatement实现批量插入数据

    题目:[JDBC]PreparedStatement实现批量插入数据 前言: PreparedStatement除了解决Statement的拼串.sql注入问题之外,还可以实现以下操作 Prepare ...

  6. JDBC 批量插入数据

    当需要批量插入数据到数据库时,我们可以利用基础的Statement或PreparedStatement外加for循环来实现操作,但这种方式效率奇低. 因此,当需要成批插入或者更新记录时,我们可以利用J ...

  7. 用python操作mysql数据库(之批量插入数据)

    #!/usr/bin/env python # -*- coding: utf-8 -*- import MySQLdb #建立连接 conn = MySQLdb.connect(host='127. ...

  8. jdbc高效的批量插入数据

    一.Statement与PreparedStatement的选择 PrepardStatement继承于Statement,主要区别点是PreparedStatement实现了SQL预编译,从而一定程 ...

  9. MySQL批量插入数据的几种方法

    最近公司要求测试数据库的性能,就上网查了一些批量插入数据的代码,发现有好几种不同的用法,插入同样数据的耗时也有区别 别的先不说,先上一段代码与君共享 方法一: package com.bigdata; ...

最新文章

  1. 【最新】三位深度学习创始人共同获得了2019年公布的图灵奖
  2. python3 报错 TypeError: load() got an unexpected keyword argument ‘encoding‘ 解决方法
  3. 如何使用postman访问若依后台权限功能
  4. SAP Spartacus CurrentProductService.getProduct方法的实现原理
  5. 你不知道的vscode之空间控制
  6. linux+svn+拉取版本_在linux客户端下管理svn版本库
  7. 现代软件工程讲义 3 代码规范与代码复审
  8. php读写分离是什么意思,php mysql读写分离
  9. 基于Spring Security的认证授权_应用详解_会话管理_Spring Security OAuth2.0认证授权---springcloud工作笔记129
  10. 基于深度残差网络的番茄叶片病害识别方法
  11. Arts 第六周(4/22 ~ 4/28)
  12. js图片上传预览功能
  13. Mplayer SMplayer 软件配置
  14. 网站优化策略有哪几种方法
  15. WiFi穿墙完全指南
  16. easy connect显示‘网络请求异常请稍后重试’
  17. 阿里数据库内核月报导航
  18. IntelliJ IDEA中JAVA连接MySQL数据库
  19. 计算机主机光驱弹不出来怎么办,电脑光驱弹不出来怎么办 电脑光驱不出来的图文解决方法...
  20. java第一个程序编译失败,零基础java第一个程序HelloWorld,编译,环境变量,运行,注释...

热门文章

  1. pyqtGraph绘图
  2. python-批量生成指定名字的图片名
  3. Python timeit 模块详解(准确测量小段代码的执行时间)
  4. 怎么把char数组转换成String
  5. 苹果cmsv10仿AGE动漫自适应黑色高端免费模板
  6. eclipse 快捷键保存在哪里
  7. Arduino Uno PM2.5粉尘传感器(GP2Y1010AU0F) 看看家里的空气质量
  8. 麻烦的罗马字符白字注音
  9. 常见的web漏洞及其防范
  10. 全国计算机二级考试内容都有什么用,2020年下半年全国计算机二级考试内容都有什么?...