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整合中的传参还不够了解!

在Python中,通常使用Web框架如Flask或Django来处理前端表单数据并将其提交到后端数据库。这里以Flask为例说明: 1. **设置项目**: 首先,你需要安装Flask库 (`pip install flask`)。创建一个新的Flask应用,导入必要的模块,并初始化应用。 ```python from flask import Flask, request, redirect, url_for app = Flask(__name__) ``` 2. **表单路由**: 创建一个处理表单提交的路由,比如`/submit`。在该函数内部,你可以使用`request.form`获取从HTML表单发送过来的数据。 ```python @app.route('/submit', methods=['POST']) def handle_form_data(): form_data = request.form print(form_data) # 打印收到的数据 # 进行数据库操作... ``` 3. **连接数据库**: 如果你想将数据存储到数据库,需要额外安装一个数据库驱动,比如SQLAlchemy配合SQLite、MySQL等。然后,创建一个数据库连接并执行插入操作。 ```python from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(80), nullable=False) @app.route('/submit', methods=['POST']) def handle_form_data(): user = User(name=form_data['name']) db.session.add(user) db.session.commit() return 'Data submitted successfully' ``` 4. **前端表单**: 使用HTML和JavaScript构建前端表单,通过AJAX或其他技术向服务器发送POST请求,传递数据。 ```html <form action="/submit" method="post"> <input type="text" name="name" placeholder="Enter your name"> <button type="submit">Submit</button> </form> ``` 5. **安全性**: 别忘了添加CSRF保护和适当的输入验证,防止恶意攻击。 当你点击表单提交按钮,Flask会接收到POST请求,并将表单数据传入后端处理函数,最终存储到数据库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值