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

Flutter SQLite插入时数据类型不匹配,字段类型正确仍报错如何解决

SQLite插入类型不匹配报错解决方案

问题根因排查

你遇到的SQLITE_MISMATCH类型不匹配报错,在当前代码场景下大概率是以下两个问题导致:

  • 旧表结构未更新:你修改建表语句后,没有删除设备本地已存在的旧数据库文件,实际运行的表结构还是修改前的版本。比如之前的Profile表存在INTEGER类型的自增主键、或者某个字段之前定义为非TEXT类型,修改建表语句后没有触发表结构更新,就会出现类型不匹配。
    修复方法:直接卸载APP重装(清除本地数据库缓存),或者在数据库版本升级逻辑中添加删除旧表、重新建表的代码即可验证。
  • SQL字符串拼接语法错误:你现在直接用字符串插值拼接SQL的写法存在漏洞,如果任意输入字段包含单引号(比如用户输入姓名为张'三),会直接打断SQL的引号结构,导致语法解析错误被误判为类型不匹配,同时还有SQL注入风险。
    修复方法:改用参数化查询写法,不要手动拼接SQL字符串:
    // 适配sqflite库的参数化插入示例
    DBProvider.db.insert(
      "Profile",
      {
        "mac": profile[0].mac,
        "image": profile[0].image,
        "name": profile[0].name,
        "age": profile[0].age,
        "nationality": profile[0].nationality,
        "profession": profile[0].profession,
        "about": profile[0].about
      }
    );
    
    如果要使用自定义查询方法,也请用占位符传参:
    DBProvider.db.customQuery(
      "INSERT Into Profile (mac,image,name,age,nationality,profession,about) VALUES (?,?,?,?,?,?,?)",
      [
        profile[0].mac,
        profile[0].image,
        profile[0].name,
        profile[0].age,
        profile[0].nationality,
        profile[0].profession,
        profile[0].about
      ]
    );
    

表结构验证方法

如果以上操作后仍报错,可以执行如下SQL查看实际运行的表结构,确认所有字段类型是否符合预期:

PRAGMA table_info(Profile);

打印返回结果即可看到每个字段的实际类型定义,快速定位不匹配的字段。

内容的提问来源于stack exchange,提问作者Jay Gunawardena

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:09:01