解决 Column count doesn‘t match value count at row 1 的可能思路

本文探讨了在使用MyBatis进行批量数据插入时遇到的问题,特别是关于如何正确使用<foreach>标签来构造SQL语句,避免因括号不当放置而导致的SQL语法错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天遇到这个问题:Column count doesn’t match value count at row 1
很明显说的是列不匹配。
示例是 insert into user(colum1,colum2,colum3)
但是values是(字段1,字段2)这种信息。列名不匹配

我这次虽然报这个错误。但是原因是对mybatis的list插入不熟悉导致的。目前我还没想明白原因。但是暂时解决了
正确示例

<insert id="insertBillList" parameterType="com.deng.billsystem.pojo.entity.Bill">
        insert into bill(userid,username,billdate,breakfastfee,lunchfee,dinnerfee,trafficfee,otherfee,otherfeeremark,createtime,updatetime)
        values
        <foreach collection="list" item="item" index="index" separator=",">
            (
            #{item.userId},#{item.username},#{item.billDate},#{item.breakfastFee},
            #{item.lunchFee},#{item.dinnerFee},#{item.trafficFee},#{item.otherFee},
            #{item.otherFeeRemark},#{item.createTime},#{item.updateTime}
            )
        </foreach>
    </insert>

错误示例:主题foreach哪行 多了open和close: open="(" close=")"
但是select的时候是可以加上这两个的。目前insert不能加这两个原因我还没找到

 <insert id="insertBillList" parameterType="com.deng.billsystem.pojo.entity.Bill">
        insert into bill(userid,username,billdate,breakfastfee,lunchfee,dinnerfee,trafficfee,otherfee,otherfeeremark,createtime,updatetime)
        values
        <foreach collection="list" item="item" index="index" separator="," open="(" close=")">
            (
            #{item.userId},#{item.username},#{item.billDate},#{item.breakfastFee},
            #{item.lunchFee},#{item.dinnerFee},#{item.trafficFee},#{item.otherFee},
            #{item.otherFeeRemark},#{item.createTime},#{item.updateTime}
            )
        </foreach>
    </insert>

2021年6月21日15:03:38 更新
哈哈哈,当时居然不知道是什么原因。其实原因很简单,是因为列的数目对不上,或者说是foreach的用法用的有问题,当时理解不到位
open和close: open="(" close=")"
会在最外层在包一层括号
举个例子,我需要的sql是

insert into demo(id,filed1,filed2)
values(1,"value1","value11"),(2,"value2","value22")

但是按照我那个写法。生成的语句是

insert into demo(id,filed1,filed2)
values((1,"value1","value11"),(2,"value2","value22"))

当然会有问题了

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值