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

JDBC中INSERT ON DUPLICATE KEY UPDATE参数绑定异常求助

解决INSERT ON DUPLICATE KEY UPDATE参数缺失问题

问题根源

你的SQL语句中ON DUPLICATE KEY UPDATE部分使用了独立占位符(?),导致总共有22个参数需要绑定,但你只设置了INSERT部分的11个,因此触发参数未设置的异常。下面提供两种实用解决方案:


方案1:重复绑定参数(直接但繁琐)

直接将已设置的11个参数再次绑定到UPDATE部分对应的占位符上,补齐22个参数:

// 原有参数设置
statement.setString(1, item.ownerId)
statement.setInt(2, item.objectId)
statement.setInt(3, item.template.id)
statement.setInt(4, item.count)
statement.setInt(5, item.enchantLevel)
statement.setString(6, item.itemLocation.name)
statement.setInt(7, item.itemLocationData)
statement.setInt(8, item.customType1)
statement.setInt(9, item.customType2)
statement.setInt(10, item.durationLeft)
statement.setLong(11, item.createTime)

// 补充UPDATE部分的参数绑定
statement.setString(12, item.ownerId)
statement.setInt(13, item.objectId)
statement.setInt(14, item.template.id)
statement.setInt(15, item.count)
statement.setInt(16, item.enchantLevel)
statement.setString(17, item.itemLocation.name)
statement.setInt(18, item.itemLocationData)
statement.setInt(19, item.customType1)
statement.setInt(20, item.customType2)
statement.setInt(21, item.durationLeft)
statement.setLong(22, item.createTime)

方案2:使用VALUES()函数复用插入值(推荐,简洁高效)

修改SQL语句,在ON DUPLICATE KEY UPDATE中用VALUES(column_name)直接引用INSERT部分对应列的插入值,这样只需绑定11个参数即可:

const val INSERT_OR_UPDATE_ITEM_SQL = "" +
        "INSERT INTO `items` (owner_id, object_id, item_id, count, enchant_level, item_location, item_location_data, custom_type1, custom_type2, duration_left, create_time)" +
        "VALUES (?,?,?,?,?,?,?,?,?,?,?) " +
        "ON DUPLICATE KEY UPDATE " +
        "owner_id=VALUES(owner_id), " +
        "object_id=VALUES(object_id), " +
        "item_id=VALUES(item_id), " +
        "count=VALUES(count), " +
        "enchant_level=VALUES(enchant_level), " +
        "item_location=VALUES(item_location), " +
        "item_location_data=VALUES(item_location_data), " +
        "custom_type1=VALUES(custom_type1), " +
        "custom_type2=VALUES(custom_type2), " +
        "duration_left=VALUES(duration_left), " +
        "create_time=VALUES(create_time)"

参数设置保持你原来的11项即可,无需额外修改。


关键注意事项

确保items表中存在主键或唯一约束(比如object_id或owner_id+object_id组合唯一键),否则ON DUPLICATE KEY UPDATE不会触发更新逻辑,只会执行插入操作。

内容的提问来源于stack exchange,提问作者Vetalll

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:17:22