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

Flutter使用sqflite创建数据库报错:找不到plus表

解决sqflite中"no such table:plus"的错误

常见原因及修复方法

1. 数据库已存在,onCreate未触发

onCreate回调仅在数据库文件首次创建时执行,如果之前运行应用时未创建plus表,后续打开数据库不会再执行该回调。

修复方案:

  • 卸载应用后重新运行,让数据库重新创建,onCreate会执行建表语句。
  • 或者通过onUpgrade补建表:
    修改openDatabase配置,提升版本号,在onUpgrade中确保表存在:
    db = await openDatabase(
      join(await getDatabasesPath(), 'data.db'),
      onCreate: (db, version) async{
        await db.execute("CREATE TABLE IF NOT EXISTS plus(point INTEGER, goal TEXT);");
        await db.execute("CREATE TABLE IF NOT EXISTS minus(point INTEGER, goal TEXT);");
      },
      onUpgrade: (db, oldVersion, newVersion) async {
        await db.execute("CREATE TABLE IF NOT EXISTS plus(point INTEGER, goal TEXT);");
        await db.execute("CREATE TABLE IF NOT EXISTS minus(point INTEGER, goal TEXT);");
      },
      version: 2, // 将版本号从1改为2
    );
    

2. 数据库初始化未完成就执行insert

initState里用Future(() async {})初始化数据库是异步操作,可能在数据库还没完成建表时就调用了db.insert,导致表不存在的错误。

修复方案:

  • 确保数据库初始化完成后再执行操作,比如标记初始化状态:
    bool _dbReady = false;
    
    @override
    void initState() {
      super.initState();
      _initDB();
    }
    
    Future<void> _initDB() async {
      db = await openDatabase(
        join(await getDatabasesPath(), 'data.db'),
        onCreate: (db, version) async{
          await db.execute("CREATE TABLE IF NOT EXISTS plus(point INTEGER, goal TEXT);");
          await db.execute("CREATE TABLE IF NOT EXISTS minus(point INTEGER, goal TEXT);");
        },
        version: 1,
      );
      setState(() {
        _dbReady = true;
      });
      print("done");
    }
    
    // 执行insert前先判断状态
    if (_dbReady) {
      await db.insert('plus', {
        "point": Provider.of<ProvDatas>(context, listen: false).point_plus,
        "goal": Provider.of<ProvDatas>(context, listen: false).text_plus
      });
    }
    

3. 检查SQL建表语句

确认建表语句语法无误:字段类型、名称、末尾分号都要正确,比如point INTEGER和goal TEXT都是sqflite支持的合法类型。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 01:15:07