首页 > 其他分享 >jdbc之批量插入

jdbc之批量插入

时间:2022-10-22 15:31:25浏览次数:83  
标签:ps jdbc name 批量 System 插入 sql conn


批量执行SQL语句

当需要成批插入或者更新记录时,可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处 理。通常情况下比单独提交处理更有效率

JDBC的批量处理语句包括下面三个方法:

addBatch(String):添加需要批量处理的SQL语句或是参数;

executeBatch():执行批量处理语句;

clearBatch():清空缓存的数据

通常我们会遇到两种批量执行SQL语句的情况:

多条SQL语句的批量处理;

一个SQL语句的批量传参;

高效的批量插入

举例:向数据表中插入20000条数据

数据库中提供一个goods表。创建如下:

CREATE TABLE goods(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)
);

实现层次一:使用Statement  

 

Connection conn = JDBCUtils.getConnection();

Statement st = conn.createStatement();

for(int i = 1;i <= 20000;i++){
String sql = "insert into goods(name) values('name_' + "+ i +")";
st.executeUpdate(sql);
}

实现层次二:使用PreparedStatement  

long start = System.currentTimeMillis();


Connection conn = JDBCUtils.getConnection();


String sql = "insert into goods(name)values(?)";

PreparedStatement ps = conn.prepareStatement(sql);

for(int i = 1;i <= 20000;i++){
ps.setString(1, "name_" + i);
ps.executeUpdate();
}


long end = System.currentTimeMillis();

System.out.println("花费的时间为:" + (end - start));//82340




JDBCUtils.closeResource(conn, ps);

实现层次三 

/*

* 修改1: 使用 addBatch() / executeBatch() / clearBatch()

* 修改2:mysql服务器默认是关闭批处理的,我们需要通过一个参数,让mysql开启批处理的支持。

* ?rewriteBatchedStatements=true 写在配置文件的url后面

* 修改3:使用更新的mysql 驱动:mysql-connector-java-5.1.37-bin.jar

*

*/

@Test

public void testInsert1() throws Exception{
long start = System.currentTimeMillis();

Connection conn = JDBCUtils.getConnection();

String sql = "insert into goods(name)values(?)";
PreparedStatement ps = conn.prepareStatement(sql);

for(int i = 1;i <= 1000000;i++){
ps.setString(1, "name_" + i);

//1.“攒”sql

ps.addBatch();
if(i % 500 == 0){
//2.执行

ps.executeBatch();
//3.清空

ps.clearBatch();
}
}

long end = System.currentTimeMillis();
System.out.println("花费的时间为:" + (end - start));//20000条:625
//1000000条:14733


JDBCUtils.closeResource(conn, ps);
}

 实现层次四

/*
* 层次四:在层次三的基础上操作

* 使用Connection 的 setAutoCommit(false) / commit()
*/

@Test

public void testInsert2() throws Exception{
long start = System.currentTimeMillis();

Connection conn = JDBCUtils.getConnection();

//1.设置为不自动提交数据

conn.setAutoCommit(false);

String sql = "insert into goods(name)values(?)";
PreparedStatement ps = conn.prepareStatement(sql);

for(int i = 1;i <= 1000000;i++){
ps.setString(1, "name_" + i);

//1.“攒”sql

ps.addBatch();
if(i % 500 == 0){
//2.执行

ps.executeBatch();
//3.清空

ps.clearBatch();
}
}

//2.提交数据

conn.commit();

long end = System.currentTimeMillis();
System.out.println("花费的时间为:" + (end - start));//1000000条:4978


JDBCUtils.closeResource(conn, ps);
}

标签:ps,jdbc,name,批量,System,插入,sql,conn
From: https://blog.51cto.com/u_15786786/5785900

相关文章

  • DCL_管理权限与JDBC_概念
    DCL_管理权限权限管理:查询权限:1.基本语法格式:showgrantsfor'用户名'@'主机名';......
  • 02,mybatise批量插入
    SqlSessionsession=sqlSessionFactory.openSession(ExecutorType.BATCH);try{SimpleTableMappermapper=session.getMapper(SimpleTableMapper.class);Listrecor......
  • MYSQL (创建,插入,查询,修改,删除,修改表结构,查看表结构)
    mysql数据库:#-什么是sql语句:结构化查询语句(一段只能被数据识别的语句,并且可以对数据库中的数据进行增删改查)sql语句的组成DML-->数据操作语言(数据库中的表......
  • JDBC管理事务_实现和数据库连接池_概述
    JDBC管理事务_实现:1.使用connection对象来管理事务开启事务:setAutoCommit(booleanautoCommit):调用该方法设置参数为false,即开后事务在执行sql之前开启事务提交事务:comm......
  • JDBC管理事务概述以及实现
    JDBC管理事务-概述JDBC控制事务:1.事务:一个包含多个步骤的业务操作,如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败2.操作:1.开启事务......
  • 数据库-jdbc的使用
    1、execute与executeUpdate异同点摘自相同点:execute与executeUpdate都可以执行增加,删除,修改的操作。packagejdbc;importjava.sql.Connection;importjava.sql......
  • 18. ElasticSearch系列之批量插入与更新
    本文介绍工作中Python版常用的高效ES批量插入、更新数据方式1.批量插入importpandasaspdfromelasticsearchimporthelpersactions=list()count=0forinde......
  • ArcGISPro 批量插入层图并将图层符号设置为指定目标图层的样式
    实际应用中,有一个GDB存了10924张路径栅格数据,现在要将个10942张栅格数据添加到ArcGISPro中,且要按照一个Pro中已经配好符号样式的图层,设置这个10942张栅格数据,效果如下图......
  • 单链表插入和删除一个节点的伪代码
    在单链表第i个元素之前插入元素e伪代码算法描述:(1)首先,定义一个指针p和计数因子j,并给计数因子j赋初值0(2)接着,用while循环开始遍历单链表,寻找第i-1个结点while循环条件:指针p不......
  • linux shell中利用关键字批量移动或复制文件
     001、[root@localhosttest3]#lsa34a45b34b54c23c34dirab[root@localhosttest3]#tree.├──a34├──a45├──b34├──b54├──c23......