当前位置: 首页 > news >正文

jdbc 使用rewriteBatchedStatements=true后,报错

jdbc 使用rewriteBatchedStatements=true后,报错了

rewriteBatchedStatements=true解释

    rewriteBatchedStatements=true是一个配置选项,它影响MySQL JDBC驱动程序的行为。JDBC是Java数据库连接的标准。当你使用Java程序连接MySQL数据库时,你需要使用这个驱动程序。

    rewriteBatchedStatements=true的意思是,当你在Java程序中使用批量插入(batching)时,MySQL JDBC驱动程序将尝试重新编写(rewrite)你的SQL语句,以便更有效地执行这些批量插入操作。

例如,假设你执行以下批量插入操作:

connection.addBatch("INSERT INTO table VALUES (1, 'a')");  
connection.addBatch("INSERT INTO table VALUES (2, 'b')");  
connection.addBatch("INSERT INTO table VALUES (3, 'c')");  
connection.executeBatch();

当rewriteBatchedStatements=true时,MySQL JDBC驱动程序将把你的SQL语句重新写成一个单一的批量插入语句,像这样:

INSERT INTO table (col1, col2) VALUES (1, 'a'), (2, 'b'), (3, 'c')

    这样做的好处是,你可以减少与数据库的通信次数,从而提高批量插入操作的性能。因为每次通信都会产生一些开销,所以通过将多个插入操作合并成一个单一的插入语句,你可以减少这些通信次数,从而提高性能。

使用场景

需要执行的sql

INSERT INTO 表名 (字段1, 字段2, 字段3, ..., 字段100)  
VALUES  (1,2,3, ...,100),  (11,12,13, ...,200),  ...  (55,992,993, ...,1000);
INSERT INTO 表名 (字段1, 字段2, 字段3, ..., 字段100)  
VALUES  (1,2,3, ...,100),  (11,12,13, ...,200),  ...  (55,992,993, ...,1000);
INSERT INTO 表名 (字段1, 字段2, 字段3, ..., 字段100)  
VALUES  (1,2,3, ...,100),  (11,12,13, ...,200),  ...  (55,992,993, ...,1000);
INSERT INTO 表名 (字段1, 字段2, 字段3, ..., 字段100)  
VALUES  (1,2,3, ...,100),  (11,12,13, ...,200),  ...  (55,992,993, ...,1000);...

批处理代码

jdbcTemplate.batchUpdate(lines.toArray(new String[lines.size()]));

异常复现

当我向lines添加数据超过5条是,就会报异常You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ';INSERT INTO;降低到5个后就不报异常

问题解决

不再使用rewriteBatchedStatements属性,然后向lines添加多条,最后批量执行,我是添加了10000条,效率挺高。
不过具体原因还没有研究清楚。

http://www.lryc.cn/news/129351.html

相关文章:

  • 第G1周:生成对抗网络(GAN)入门
  • Stable Diffusion基础:ControlNet之图片高仿效果
  • TCGA数据下载推荐:R语言easyTCGA包
  • JLSX 模版指令导出Excel
  • 【制作npm包3】了解 tsconfig.json 相关配置
  • 【0基础入门Python笔记】一、python 之基础语法、基础数据类型、复合数据类型及基本操作
  • 2023-08-18力扣每日一题
  • mac M1安装opencv方法及类型报错解决
  • Screen终端管理工具
  • 【python自动化办公】PysimpleGUI官网案例全部项目代码文件及运行截图
  • 9.处理this和防抖、节流
  • Spark操作Hive表幂等性探索
  • 【可变形卷积3】 DCNv2 安装
  • 归并排序 与 计数排序
  • 机器学习之逻辑回归
  • 操作符详解上(非常详细)
  • React 高阶组件(HOC)
  • 【NepCTF2023】复现
  • 大文件切片上传
  • ubuntu切换python版本
  • docker 安装 elasticsearch、kibana 7.4.2
  • 【es6】函数参数设置默认值
  • Pytest和Unittest测试框架的区别?
  • C#基础知识(一)
  • 我还不知道?Android组件化插件化模块化
  • 借助 AI 工具,真的能成为 10x 工程师?
  • TypeScript 面向对象
  • k8s 中快速启动curl pod 做api test
  • 神经网络基础-神经网络补充概念-56-迁移学习
  • 力扣:65. 有效数字(Python3)