目录

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. 【H2 Database】查看帮助信息
  2. json对象转换成string的方法
  3. rollup学习小记
  4. 5月17日 AJAX 之 XML
  5. mongoose 批量修改字段_WordPress图片路径批量替换方法
  6. 有限元python编程流行吗_Python进行有限元分析
  7. Java讲课笔记10:类的封装
  8. threejs引擎中 环境光线与管道流动
  9. UI Framework-1: Ash Color Chooser
  10. Python标准库 urllib
  11. android 拍照 对焦,在Android中设置相机对焦区域
  12. 纯代码蓝色理想的logo
  13. 【javaScript】原生实现窗口拖动效果
  14. ArcMap10.2 选项(Options)窗口显示不完整问题解决(以默认加载栅格数据去背景显示设置为例)
  15. python 3.6.0.tgz,如何在Ubuntu和LinuxMint上安装Python 3.6.0
  16. centos7分区挂载大容量数据盘
  17. 汇编实现乐曲演奏《两只老虎》
  18. ps2模拟器安卓版_安卓PS2模拟器游戏推荐:奥特曼格斗进化3
  19. 目标规划模型:求解思路、序贯式算法
  20. python 加法代码_python运行加法

热门文章

  1. 信息收集之Github搜索语法
  2. img 图片移动效果方式
  3. 数据分析7_酒店预定分析_kaggle入门
  4. 22世纪也不是中国人的世纪
  5. 【Python】【实战】对 excel 某列进行统计,并按出现频率排序
  6. Jmeter源码分析(一)
  7. 2022年制冷与空调设备运行操作考试试题及答案
  8. 微信小程序如通过判断动态决定button是否禁用
  9. esp分区创建 linux_Linux 基础知识: GPT分区基础知识及如何在GPT分区上安装WIN7
  10. 四天学爬虫----task1