You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter sqflite插入报错‘datatype mismatch’问题求助

解决Flutter sqflite插入时的datatype mismatch错误

问题分析

从错误日志和代码来看,导致插入失败的核心原因有两个可能:参数处理逻辑错误,或者实际数据库表结构与预期不符。

解决方案

1. 修正参数处理逻辑

Quest类的toDBData方法中,category字段被手动添加了单引号,这是完全多余的。sqflite会自动处理字符串参数的绑定,不需要手动为字符串添加引号。修改代码如下:

Map<String, dynamic> toDBData() => {
    "category": category, // 移除多余的单引号
    "level": level,
    "need_token": needToken,
    "reward_token": rewardToken,
    "start_date": startDate.millisecondsSinceEpoch,
    "finish_date": finishDate.millisecondsSinceEpoch,
    "achieve_date": achieveDate?.millisecondsSinceEpoch,
    "goal": goal,
    "need_times": needTimes,
    "achievement": achievement
  };

2. 验证并修复表结构

即使建表语句中category定义为TEXT,若旧数据库未被清除,实际表结构可能仍保留旧的类型(比如之前误设为INTEGER):

  • 直接卸载应用后重新安装,彻底清除旧数据库文件;
  • 或执行SQL查询确认表结构:
    PRAGMA table_info(Quest);
    
    若查询结果中category的type字段不是TEXT,需删除旧表重新创建,或添加数据库迁移逻辑更新表结构。

3. 其他排查点

  • 确保使用最新版本的sqflite插件,避免旧版本的已知兼容性bug;
  • 检查所有数值类型字段(level、need_token等)在代码中均为int类型,无隐式类型转换错误。

内容的提问来源于stack exchange,提问作者장성호

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 06:20:43