JDBC-Driver、PostgreSQL的SQL语句参数上限错误分析及解决办法(源码)

本文主要是介绍JDBC-Driver、PostgreSQL的SQL语句参数上限错误分析及解决办法(源码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

JDBC-Driver、PostgreSQL的SQL语句参数上限错误分析及解决办法(源码)

Mybatis + PostgreSQL-JDBC-Driver 42.1.4批量插入24178条数据(每条30字段).报如下错误:

pSQL 9.6

Cause: org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend.
; SQL []; An I/O error occurred while sending to the backend.; nested exception is org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend.
Tried to send an out-of-range integer as a 2-byte value: 647430

没想到批量插入的顶峰在JDBC-Driver这里首先出现天花板.

原因:

  • 这里是JDBC-Driver 一条SQL**参数数量达到了上限,幂增操作的参数=记录数(行)插入的字段数(列)*.
  • JDBC-Driver 支持的参数数量跟版本(x.y.z)和类型(xx数据库)有关.

解决思路:

分割成小段提交.

解决办法:

@Service
public class ChPeriodicalThesisService {@Autowiredprivate ChPeriodicalThesisMapper thesisDao;//其他CRUD.../*** .* TODO  批量插入* @param thesisList* @return* @throws Exception*/public int insertList(List<ChPeriodicalThesis> thesisList) throws Exception {return thesisDao.insertList(thesisList);}/*** .* TODO 递归:分割长List为 subNum/段。* @param thesisList 论文list(总)* @param subNum 每段长度 (最小1)* @return* @throws Exception*/private int recurSub(List<ChPeriodicalThesis> thesisList,int subNum) throws Exception{//参数合法性判断:if(thesisList.isEmpty()) return 0;if(subNum<1) return 0;//大于subNum,进入分割if(thesisList.size() > subNum) {// && !(thesisList.isEmpty())//将前subNum分出来,直接插入到数据库。List<ChPeriodicalThesis> toInsert = thesisList.subList(0, subNum);//将subNum至最后 (剩余部分) 继续进行递归分割List<ChPeriodicalThesis> toRecurSub = thesisList.subList(subNum, thesisList.size());//将前subNum分出来,直接插入到数据库 && 将subNum至最后 (剩余部分) 继续进行递归分割 。统计数量return insertList(toInsert) + recurSub(toRecurSub,subNum);//少于subNum,直接插入数据库 (递归出口)}else {//插入到数据库。统计数量return insertList(thesisList);}}/*** .* TODO 将数据流读取并批量插入* @param in* @return* @throws Exception*/public int readStreamAndInsertList(InputStream in) throws Exception {FileUtil fileUtil = new FileUtil();List<ChPeriodicalThesis> thesisList = fileUtil.importFileOfChPeriodicalThesis(in);//每1500为一段 插入return recurSub(thesisList,1500);}
}

源码: 欢迎交流.

https://github.com/timo1160139211/trans

参考资料:

https://stackoverflow.com/questions/20878854/postgresql-exception-org-postgresql-util-psqlexception-an-i-o-error-occured-w

效果:
这里写图片描述

这里写图片描述

这篇关于JDBC-Driver、PostgreSQL的SQL语句参数上限错误分析及解决办法(源码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/889632

相关文章

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

MySql死锁怎么排查的方法实现

《MySql死锁怎么排查的方法实现》本文主要介绍了MySql死锁怎么排查的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录前言一、死锁排查方法1. 查看死锁日志方法 1:启用死锁日志输出方法 2:检查 mysql 错误

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

Java通过反射获取方法参数名的方式小结

《Java通过反射获取方法参数名的方式小结》这篇文章主要为大家详细介绍了Java如何通过反射获取方法参数名的方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、解决方式方式2.1: 添加编译参数配置 -parameters方式2.2: 使用Spring的内部工具类 -

MySQL修改密码的四种实现方式

《MySQL修改密码的四种实现方式》文章主要介绍了如何使用命令行工具修改MySQL密码,包括使用`setpassword`命令和`mysqladmin`命令,此外,还详细描述了忘记密码时的处理方法,包... 目录mysql修改密码四种方式一、set password命令二、使用mysqladmin三、修改u

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

SpringBoot中的404错误:原因、影响及解决策略

《SpringBoot中的404错误:原因、影响及解决策略》本文详细介绍了SpringBoot中404错误的出现原因、影响以及处理策略,404错误常见于URL路径错误、控制器配置问题、静态资源配置错误... 目录Spring Boot中的404错误:原因、影响及处理策略404错误的出现原因1. URL路径错

SQL Server数据库迁移到MySQL的完整指南

《SQLServer数据库迁移到MySQL的完整指南》在企业应用开发中,数据库迁移是一个常见的需求,随着业务的发展,企业可能会从SQLServer转向MySQL,原因可能是成本、性能、跨平台兼容性等... 目录一、迁移前的准备工作1.1 确定迁移范围1.2 评估兼容性1.3 备份数据二、迁移工具的选择2.1

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查