普通的执行过程是:每处理一条数据,就访问一次数据库;
而批处理是:累积到一定数量,再一次性提交到数据库,减少了与数据库的交互次数,所以效率会大大提高
但是使用了 addBatch() -> executeBatch() 还是很慢
解决:
a.需配置 参数 在数据库连接URL后面加上这个参数:
dbUrl "jdbc:mysql://localhost:3306/User?rewriteBatchedStatements=true";
b.conn.setAutoCommit(false); 需要设置 手动提交
完整例子:
1.正常JDBC 版本
String sql = "insert into table *****"; con.setAutoCommit(false); ps = con.prepareStatement(sql); for(int i=1; i<65536; i++){ ps.addBatch(); // 1w条记录插入一次 if (i % 10000 == 0){ ps.executeBatch(); con.commit(); } } // 最后插入不足1w条的数据 ps.executeBatch(); con.commit();
2.Spring boot jdbc版本
@Autowired
private JdbcTemplate jdbcTemplate;
private void batchInsertOrUpdateGoodsTemp(List<GoodsTemp> list){ StringBuilder sql = new StringBuilder("INSERT INTO `gds_goods_temp` (`CAT_CODE`, `BRAND_CODE`, `GOODS_SN`, `GOODS_STATUS`, `GOODS_NAME` ").append( ", `IS_MARKET`, `IS_DELETE`, `GOODS_INTRO`, `GOODS_DETAIL`, `UNIT`, `WEIGHT`, `SPEC`, `BARCODE`, `GOODS_IMG`, `GOODS_THUMB`, `GOODS_GALLERY_IMGS`") .append(", `MARKET_PRICE`, `REMARK`, `ADD_TYPE`, `ADD_MCH_NO`) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); KeyHolder key = new GeneratedKeyHolder(); this.jdbcTemplate.update(con -> { con.setAutoCommit(false); PreparedStatement preState =null; try { preState = con.prepareStatement(sql.toString(), Statement.RETURN_GENERATED_KEYS); for(GoodsTemp temp : list){ preState.setString(1, temp.getCatCode()); preState.setString(2, temp.getBrandCode()); preState.setString(3, temp.getGoodsSn()); preState.setString(4, temp.getGoodsStatus()); preState.setString(5, temp.getGoodsName()); preState.setString(6, temp.getIsMarket()); preState.setString(7, temp.getIsDelete()); preState.setString(8, temp.getGoodsIntro()); preState.setString(9, temp.getGoodsDetail()); preState.setString(10, temp.getUnit()); preState.setBigDecimal(11, temp.getWeight()); preState.setString(12, temp.getSpec()); preState.setString(13, temp.getBarcode()); preState.setString(14, temp.getGoodsImg()); preState.setString(15, temp.getGoodsThumb()); preState.setString(16, temp.getGoodsGalleryImgs()); preState.setBigDecimal(17, temp.getMarketPrice()); preState.setString(18, temp.getRemark()); preState.setString(19, temp.getAddType()); preState.setString(20, temp.getAddMchNo()); preState.addBatch(); } preState.executeBatch(); con.commit(); } catch (SQLException e) { log.error("sql语句{},批量执行错误:{}", sql,e.getMessage()); } return preState; }, key); }
相关推荐
#### 一、JDBC批量插入 JDBC(Java Database Connectivity)是Java平台中用来标准地连接数据库的技术。通过JDBC,Java应用程序可以与多种类型的数据库进行交互,实现数据的读取、写入等功能。批量操作是指在一次...
本文将深入探讨如何使用JDBC进行批量插入数据,这在处理大量数据时能显著提高性能。 批量插入数据是数据库操作中常见的一种优化策略,特别是在数据分析、数据迁移或大数据处理等场景。传统的单条插入方式可能会导致...
本文将探讨Mybatis和JDBC在批量插入MySQL数据库时的性能差异,并提供相关的测试资源。 首先,JDBC(Java Database Connectivity)是Java平台中用于与数据库交互的一种规范,它允许程序员使用SQL语句直接操作数据库...
在Oracle数据库中,Blob类型用于存储大量的二进制数据...总之,批量插入大字段是处理大量Blob数据的关键策略,通过JDBC提供的批处理功能,结合合理的事务管理和内存管理,可以显著提升Oracle数据库中的大数据插入效率。
### Kettle 批量插入Hive2:解决表输出速度慢问题 #### 一、问题背景及原因分析 在使用Kettle进行数据处理时,尤其是将数据从源系统传输到目标系统的过程中,如果目标系统是Hive2,则可能会遇到表输出速度极其缓慢...
### 利用JDBC解决大数据查询的问题 #### 一、问题背景 在处理大数据查询时,经常遇到的一个问题是由于查询结果集过大而导致的性能瓶颈,尤其是当这些数据需要被加载到客户端应用程序的内存中时。这种情况下的常见...
在Java的数据库编程中,JDBC(Java Database Connectivity)提供了多种方法来实现数据的批量插入,从而提高数据库操作的效率。本篇文章将深入探讨三种不同的JDBC批量插入编程方法,并进行对比分析,以帮助开发者更好...
Hibernate+JDBC实现批量插入、更新及删除的方法详解 概述:本文主要介绍了Hibernate+...本文通过实例形式详细分析了Hibernate+JDBC实现批量插入、更新及删除的方法,提供了批量操作的各种技巧和解决方案,供大家参考。
"JDBC连接Oracle数据库常见问题及解决方法" 本文将对 JDBC 连接 Oracle 数据库常见问题进行总结和解决方法的介绍。以下是针对不同问题的解决方案: 1. Jbuilder 正确连接 Oracle 数据库需要注意的几个问题 在使用...
本篇文章将详细介绍如何使用Java实现JDBC批量插入数据,并比较三种常见的JDBC批量插入编程方法。 **方法一:使用PreparedStatement加批量的方法** PreparedStatement是Statement的子接口,允许预编译SQL语句,这...
"JDBC连接MySQL数据库批量插入数据过程详解" 本文主要介绍了使用JDBC连接MySQL数据库批量插入数据的过程详解,通过示例代码详细介绍了批量插入数据的步骤,对大家的学习或者工作具有一定的参考学习价值。 一、JDBC...
使用 JDBC 批量处理语句可以解决两种常见的情况:一种是多条 SQL 语句的批量处理,另一种是同一条 SQL 语句的批量传参。对于第一种情况,我们可以使用 JDBC 的批量处理语句,创建一个 Statement 对象,然后 addBatch...
在IT领域,尤其是在数据库操作与框架应用中,批量插入数据是一项常见且重要的需求。相比于单条插入,批量插入能够显著提升数据处理效率,减少数据库I/O操作,从而提高整体性能。本文将深入探讨如何利用MyBatis框架...
2. **使用PL/SQL或外部编程语言(如C#、Java等)**:通过编程接口(如ODBC、JDBC、Oracle Data Provider for .NET等)进行批量插入操作。这种方式更灵活,可以适应更复杂的数据处理需求。 ### C#代码示例解析 提供...
本主题将详细讲解如何使用Spring JDBC Template访问MySQL数据库并进行批量插入数据的操作。 首先,我们需要在项目中引入Spring框架的相关依赖,通常包括`spring-context`和`spring-jdbc`。这些可以在Maven或Gradle...
本篇文章将详细介绍如何利用Java和MyBatis实现批量插入数据到Oracle数据库中。 首先,我们需要理解Oracle数据库的一些基本概念。Oracle是世界上最流行的商业关系型数据库管理系统之一,以其强大的功能和高可靠性而...
文章地址:...Java-JDBC【之】批量插入操作、优化取消自动提交(提速40+倍) 1.JDBC批量操作 2.两种实现方式 3.优化,取消自动提交 4.完整源码 《目录:Java-JDBC学习(编写中...)》 《幕》
这段Java代码通过JDBC实现了向Oracle数据库批量插入数据的功能。关键步骤包括:建立数据库连接、准备SQL语句、批量添加SQL语句到批处理队列、执行批处理以及事务提交。这种方式相比于逐条插入数据,可以显著提升插入...
4. **大数据处理**:虽然JDBC本身并不是专门针对大数据场景设计的,但可以利用其批量操作等特性来优化大数据处理流程。 综上所述,JDBC为Java开发者提供了一套强大且灵活的工具集,使他们能够在不同的数据库环境中...
在实际操作中,你可能需要结合具体的技术栈,例如Python的pandas库配合SQLAlchemy,Java的JDBC,或者是Node.js的Sequelize等,使用它们提供的批量插入接口。同时,要关注数据库类型,如MySQL、PostgreSQL、Oracle或...