Column ‘XXX‘ cannot be null问题 后端接收不到前端表单提交的数据

前景摘要:整合SSM练习Insert语句时,想通过前端页面的表单将数据通过后端的处理存储到数据库,但是一直报Column ‘列名‘ cannot be null(某个列名不能为空)的错误,急着知道的直接看最后,中间都是牢骚。
image-20220315083600676
查询功能能够正常运行,但就是插入用户功能报错,如下图
img
代码逻辑没有问题

Controller层保存用户方法代码

@RequestMapping("/save")
    public void save(User user, HttpServletRequest request, HttpServletResponse response) throws IOException{
        userService.addUser(user);
        response.sendRedirect(request.getContextPath()+"/user/findAll");
        return;
    }

Dao层保存用户方法代码

    //增加用户
    @Insert("insert into t_user (username,password,age) values (#{username},#{password},#{age})")
    void addUser(User user);

期间面向百度改bug走了如下弯路:

1、怀疑是本地mysql问题,修改了本地配置my.int,无效。

2、在某个成功解决类似问题的老哥帖子中,看到此图(web项目各环境所需版本支持),继而怀疑是mysql与pom.xml中的mysql-connect-java、C3P0、JDBC等依赖有问题,重装了mysql版本,由5.5强行升级到5.7,依旧无效
image-20220315085007086

插一嘴:难受的是在升级mysql后,原本有用的查询功能也跑不动了!后在奋战数小时后终于实验找到了能够恢复查询功能的依赖版本,所以能运行没事不要随便动依赖和环境的版本!

mysql-connector-java: 8.0.16 (可以是最新)
c3p0: 0.9.5.2 (MySql8.0的驱动必须用0.9.5.2以上的c3p0版本)
mchange-commons-java: 0.2.11 (0.9.5.2以上的c3p0版本必须有mchange)
jdbc连接配置: driver 可以是"com.mysql.jdbc.Driver",也可以是"com.mysql.cj.jdbc.Driver"

于是一切又回到了原点,查询功能能用,但是依旧报Column ‘列名’ cannot be null的错误。

3、数据库表字段设置非空问题?在设置了允许为空后,测试发现还是不对。

解决方案:静下心后不再迷恋百度,思考是映射路径的问题,先前虽然仔细检查了@RequestMapping、form action关联的路径,但是遗漏了表单属性需要与Insert语句中传入的参数匹配!否接接收不到数据!(两张图中红线框起来的属性需要匹配!)

image-20220315091118132
image-20220315091151912

问题解决:成功保存数据。

总结:太粗心,碰到的bug太少,对ssm整合中的传参还不够了解!

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误提示意思是"列 ID 不能为空",通常出现在数据库操作中,表示在插入或更新数据时,某个列(一般是指数据库表的主键列)的值为空,无法完成操作。解决方法是检查代码中相关的数据操作语句,确保所有必填列都有值被赋予。 ### 回答2: column id cannot be null是一个数据库错误信息,表示要求的表中某一列的“id”不能为空。当数据库引擎执行一条SQL语句时,它会尝试从一个表中获取特定列中的指定行的数据。如果该列被标注为“非空”,则数据库引擎会在插入新行或更新存在行的数据时,强制要求填充该列的值,如果值为空,就会出现“column id cannot be null”这个错误信息。 通常情况下,这个错误信息指示表定义有问题,缺少必要的数据。这个错误可以通过更完整的数据表、明确指定列的默认值或在插入行时显式指定该列的值来解决。 此外,一个常见的情况是开发人员执行了某个操作,但并没有取走返回值,因此不知道实际是哪个“id”出现了问题。解决这个问题的最佳方法是,在添加或更新操作中都显式地指定"id"列的值。这可以避免潜在的意外情况,即当旧数据被删除时,没有新数据代替它。 总之,“column id cannot be null”的错误通常是由于一个表定义配置不当或一个开发人员的代码错误所引起的,可以通过检查数据表定义、显式指定列的默认值或在插入行时显式指定该列的值来解决。 ### 回答3: “column id cannot be null”是一个数据库错误信息,意思是“列id不能为空”。在数据库中,每个表都包含多个列,这些列可能包含整数、文本、日期等数据类型。每一列都有一个唯一的标识符,称为列id。这个错误提示可能是在执行插入或更新操作时出现的。 当程序尝试往数据库中插入新数据或更新已有数据时,如果没有给列id赋值或者赋值为null,就会触发这个错误。这是因为数据库要求每一列都要有一个唯一的标识符,用于区分不同的列。如果列id为空,那么该列就失去了唯一性,无法被识别和区分。 为了解决这个问题,需要检查程序的代码和数据库的表结构,确定列id是否在插入操作中被正确地赋值。如果程序中没有指定列id的赋值,就需要在代码中添加对该列的默认值赋值语句。如果数据库表结构中没有指定该列的默认值,那么需要修改表结构,为该列添加默认值。一旦列id被正确地赋值,就可以避免这个错误并正常执行插入或更新操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值