`
Everyday都不同
  • 浏览: 723521 次
  • 性别: Icon_minigender_1
  • 来自: 宇宙
社区版块
存档分类
最新评论

批量入库时报错:prepared statement contains too many placeholders

阅读更多

最近在做Mysql的批量入库时,执行到PreparedStatment.executeBatch()这一句时,报错:prepared statement contains too many placeholders,提示占位符过多~,可是我发现我入库的表也才40+个字段,应该不至于吧,但是……

 

在批量入库时,Mysql会将insert语句拼装成如下格式:

insert into tablename(字段1, 字段2, 字段3, ……, 字段45) values(:字段1, :字段2, :字段3, ……,  :字段45), (:字段1, :字段2, :字段3, ……,  :字段45), (:字段1, :字段2, :字段3, ……,  :字段45), ……,  (:字段1, :字段2, :字段3, ……,  :字段45)

 比如我批量入库的对象是3000+条记录,虽然我把它封装成一个List集合,但是集合里面每个元素都有45个key(一个key对应一个字段)。sql被拼装成上述格式后,占位符的个数达到3000*45=135000,大于mysql对占位符的最高限制65535。

所以需要注意的是,批量入库时,占位符的个数不再是45,而是45与条数的乘积。

 

教训:尝试把List分批,每批再分别批量,确保每批所产生的占位符个数小于mysql的最高限制65535.

一般情况下,这种错误在批量入库的时候容易出现,而往往在大批量数据的情况下出现,多多注意。

分享到:
评论

相关推荐

    MySQL错误ERROR 1615 解决方法

    ERROR 1615 (HY000): Prepared statement needs to be re-prepared 经过测试,发现不是合服脚本的问题。经过一番搜索。发现原来是mysql的变量值设置不合理引起的,调整以下值: table_open_cache 64=>16384 table_...

    MySQL关于ERROR 1290 (HY000)报错解决方法

    在MySQL数据库操作中,错误号1290 (HY000)通常表示服务器正在运行时启用了`--skip-grant-tables`选项,导致无法执行特定的权限管理语句,如GRANT或REVOKE。这个选项使得MySQL在启动时不检查用户权限,允许任何用户...

    statement和prepared区别

    在使用Java语言进行数据库交互时,JDBC(Java Database Connectivity)是实现数据库操作的必备技术之一。其中,Statement和PreparedStatement是两种常用的SQL语句执行接口。在理解和掌握它们之间的区别之前,我们...

    prepared statement mysql oracle

    何登成大牛写的, 给大家共享一下下, 希望有所收获。

    SQLite LabVIEW.zip_doneioo_labview_sqlite labview_sqllite_sqllit

    SQLite是用于嵌入式数据库的一款轻量级但功能强大的软件,尤其适合在LabVIEW(Laboratory Virtual Instrument Engineering Workbench)环境中使用。LabVIEW是由美国国家仪器(NI)开发的一种图形化编程语言,常用于...

    《MySQL高效编程》.(王志刚,江友华 ).[PDF]

    * 使用prepared statement:prepared statement可以减少SQL语句的解析时间,提高数据库性能。 * 使用存储过程:存储过程可以简化复杂的查询语句,提高数据库性能。 * 使用触发器:触发器可以自动执行数据库操作,...

    fluent-plugin-mysql-prepared-statement

    fluent-plugin-mysql-prepared-statement, 的插件 流利的插件mysql准备语句查询 安装 td-agent(Linux) /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-mysql-prepared-statement td-agent(Mac...

    配置抵御SQL注入试攻击的服务器.pdf

    * 使用 Prepared Statement:Prepared Statement 可以防止 SQL 注入攻击,因为它将 SQL 语句和参数分离,避免了恶意代码的注入。 * 输入验证:对用户输入的数据进行验证,以防止恶意代码的注入。 * 限制数据库权限:...

    Android 视频录制(1.6以上版本使用)

    以前发的一个版本是在1.6版本上做的,很多人发现在1.6以上的版本运行都报错,经过查阅资料,得知1.6以上的版本将摄像头初始化的功能已经封装好了,所有在1.6以上的版本初始化后再录制会报错"prepared failed",将初始...

    java中PreparedStatement和Statement的区别

    Java 中 PreparedStatement 和 Statement 的区别 Java 中的 PreparedStatement 和 Statement 都是用于执行 SQL 语句的接口,但是它们之间存在一些关键的区别。 首先,从数据库执行 SQL 语句的角度来看,使用 ...

    4A免费策划:奥美-Prepared for APP.pptx

    4A免费策划:奥美-Prepared for APP.pptx

    JDBC的动态SQL语句在浏览器_服务器模式中的应用.pdf

    我们将介绍如何使用JDBC的Prepared Statement接口来创建动态SQL语句,并讨论这种技术的优点和缺点。 创建动态SQL语句需要首先建立基本的SQL语句,然后给出不同的参数集执行不同的SQL语句。例如,以下是一个简单的...

    cpp-PostgreSQL精确的分数运算

    在C++中构建这样的SQL语句,然后使用`pqxx::prepared_statement`执行: ```cpp std::string insert_query = "INSERT INTO fractions (value) VALUES ($1)"; pqxx::prepared_statement ps(t, insert_query); // ...

    什么是SQL注入法攻击

    2. Prepared Statement:使用 Prepared Statement 来执行 SQL 语句,可以避免 SQL 注入攻击。Prepared Statement 可以将 SQL 语句和参数分离,使得攻击者无法注入恶意的 SQL 代码。 3. LIMIT 和 OFFSET:使用 LIMIT...

    Jmeter中JDBC request多条SQL语句使用.docx

    - 当需要批量更新数据时非常有用。 - 例如,在一次操作中更新多个用户的密码。 ##### 5. Callable Statement - **定义**:这是一种支持执行多条查询、更新语句的方式,响应数据可以展示所有执行过的SQL语句的...

    JDBC从入门到放弃02-JDBC的Statement数据库增加和删除

    本教程将深入浅出地介绍如何使用JDBC的Statement接口来执行数据库的增加(INSERT)和删除(DELETE)操作,帮助初学者从入门到熟练掌握这一核心技术。 首先,JDBC的核心是Java.sql包中的DriverManager类,它负责管理...

    PDO防注入原理分析以及注意事项

    我们都知道,只要合理正确使用PDO,可以基本上防止SQL注入的产生,本文主要回答以下两个问题: ...Many of the more mature databases support the concept of prepared statements. What are they? They can be thought

    SQL注入与代码防御.pdf

    3. Prepared Statement:使用 Prepared Statement,可以防止攻击者构造恶意的 SQL 代码。 4. 限制数据库权限:限制数据库权限,可以防止攻击者访问敏感数据。 5. 定期更新软件:定期更新软件,可以修复已知的安全...

Global site tag (gtag.js) - Google Analytics