使用SQLite crate时bind参数执行INSERT插入语句失败如何解决
问题修复方案
你遇到的INSERT执行失败通常是以下几个原因导致的,按顺序排查即可:
- 优先补全错误捕获逻辑:当前代码中
statement.execute()直接忽略了返回的Result结果,执行失败的具体原因(如表不存在、字段类型不匹配、唯一约束冲突等)都会包含在该结果中,先修改最后一行代码捕获错误:
运行后根据抛出的具体错误信息可直接定位根因。statement.execute().unwrap(); - 确认数据库连接的事务配置:如果你的
connect_db()方法初始化连接时关闭了自动提交(开启了显式事务模式),执行完INSERT操作后必须手动提交事务才能将数据持久化到库中,修改后参考代码如下:let connection = &connect_db(); let mut statement = connection.prepare("INSERT INTO History(field_1,field_2,field_3) VALUES(?,?,?)").unwrap(); statement.bind(1,45).unwrap(); statement.bind(2,42).unwrap(); statement.bind(3,65).unwrap(); statement.execute().unwrap(); // 开启显式事务时必须添加该行手动提交 connection.commit().unwrap(); - 核对字段类型匹配:确认
History表的field_1、field_2、field_3三个字段均为整数类型,若字段为字符串/布尔等其他类型,绑定的参数类型要和字段定义保持一致。
内容的提问来源于stack exchange,提问作者Mathe Eliel
相关产品推荐
相关产品推荐

