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

Flutter向SQLite的histories_table插入数据未持久保存如何解决

插入数据未保存到example.db的解决方案
  • 首先验证插入操作的执行状态,你当前代码没有判断insert返回值也没有捕获异常,先修改插入逻辑增加排查日志:
Future<void> insertDB(int ftsId) async {
  try {
    final db = await ConectionDB.dbPro.databaseUser;
    // 先打印当前连接的数据库路径,确认是目标example.db
    print('当前操作数据库路径:${db.path}');
    DateTimeHelper helper = DateTimeHelper();
    DateTime now = DateTime.now();
    String createdAt = helper.formatDateTime(now.toString());
    Map<String, dynamic> row = {
      'fts_main_content_id': ftsId,
      'createdAt': createdAt,
    };
    // insert方法成功返回插入行的id,失败返回-1
    final insertRes = await db.insert(
      tableName, 
      row,
      // 可选:指定冲突处理策略,避免主键重复时静默失败
      conflictAlgorithm: ConflictAlgorithm.replace,
    );
    print('插入操作结果:$insertRes');
    final queryRes = await db.query(tableName);
    print('表内当前数据量:${queryRes.length}');
  } catch (e) {
    print('插入操作报错:$e');
  }
}
  • 如果插入返回值为-1,说明插入操作直接失败,优先检查表结构:执行PRAGMA table_info(histories_table) 查看histories_table的字段定义,确认是否存在未设置默认值的非空字段你没有传入,或者字段名拼写和row中的键不匹配,比如是否把created_at写成了createdAt。
  • 如果插入返回正整数,运行时查询也能查到数据,但是查看本地的example.db文件没有数据,说明你连接的数据库和你查看的不是同一个文件:移动端SQLite默认存储在应用沙盒目录下,项目预置的example.db只是初始模板,运行时操作的是拷贝到沙盒里的副本,需要导出沙盒内的数据库文件才能看到实际写入的数据。
  • 检查上层调用逻辑是否包裹了未提交的事务:如果insertDB的调用上下文开启了事务但没有执行commit,所有写入操作会在事务结束后自动回滚,不会持久化到磁盘。
  • 确认ConectionDB.dbPro.databaseUser对应的数据库实例正确,没有连接错其他数据库文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 15:15:05