You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PreparedStatement.executeUpdate()向Db2插入数据时遇SQL-104错误

问题分析与解决

错误原因

DB2的JCC JDBC驱动在处理PreparedStatement时,不允许SQL语句末尾带有分号;。你提供的插入语句INSERT INTO main.Parent (col) VALUES (?);末尾包含分号,这直接触发了SQLCODE=-104的语法错误。

佐证细节

错误日志中的SQLERRMC=;;ent (col) VALUES (?);<space>明确显示驱动将分号视为SQL语法的一部分,导致解析失败。

IDEA控制台正常执行的原因

JetBrains IDEA的数据库控制台会自动对输入的SQL进行预处理,包括自动移除语句末尾的分号,因此不会触发该错误。

解决方案

  1. 修正SQL语句:移除末尾的分号,改为:
INSERT INTO main.Parent (col) VALUES (?)
  1. 适配自研类库:在类库中针对DB2数据库添加特殊处理,自动移除所有PreparedStatement对应的SQL语句末尾的分号,确保兼容性。

代码调整示例

确保传入conn.prepareStatement的SQL是不带分号的版本:

// 修正后的SQL,移除末尾分号
val correctedSql = query.sql.removeSuffix(";")
ps = conn.prepareStatement(correctedSql, Statement.RETURN_GENERATED_KEYS)

内容的提问来源于stack exchange,提问作者Uroš Jarc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 15:46:02