MyBatis 报错:Column count doesn‘t match value count at row 1 详解与解决

本文适用于使用 MyBatis + MySQL 开发中出现 “Column count doesn't match value count at row 1” 报错的朋友,尤其是在批量插入或更新数据时,遇到 XML 映射文件中 insert 标签报错的问题。
一、遇到的问题:

二、错误原因分析

列数与值数量不匹配(Column count doesn't match value count at row 1)

仔细查看才知道原因:我们少写一个逗号
这两个参数之间少了一个逗号(,),SQL 拼接后会把它们拼成一个字段,导致值的数量变成 7,而你指定了 8 个字段。

#{item.itemCode} #{item.whCode},

<insert id="insertOrUpdateBatch" parameterType="java.util.List">
    INSERT INTO wk_crm_fg_inven (
        id, order_number, item_code, wh_code,
        purchase_price, delivery_ratio, balance_value, tot_amount
    )
    VALUES
    <foreach collection="list" item="item" separator=",">
        (#{item.id}, #{item.orderNumber}, #{item.itemCode} #{item.whCode},
         #{item.purchasePrice}, #{item.deliveryRatio}, #{item.balanceValue}, #{item.totAmount})
    </foreach>
    ON DUPLICATE KEY UPDATE
        order_number = VALUES(order_number),
        item_code = VALUES(item_code),
        wh_code = VALUES(wh_code),
        purchase_price = VALUES(purchase_price),
        delivery_ratio = VALUES(delivery_ratio),
        balance_value = VALUES(balance_value),
        tot_amount = VALUES(tot_amount)
</insert>
 

三、正确写法 ✅

将问题修正为:


四、总结

  •  这个错误常见于 SQL 拼接语句中,尤其是 VALUES (...) 部分;

  • 建议使用格式化工具或 IDEA 的 XML 格式化功能辅助检查;

  • 不要忽略参数之间的逗号,哪怕是一个字段漏了逗号也会导致 SQL 整体错乱;

  •  尽量提前用单条 SQL 在 Navicat / MySQL 客户端测试,确认无误再用于批量插入。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lucky GGBond

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值