【问题标题】:Flutter Delete all data in sqlite table, then insert recordsFlutter 删除sqlite表中的所有数据,然后插入记录
【发布时间】:2020-02-28 00:19:31
【问题描述】:
static Future<void> cleanDatabase() async {
    try{
      var start = 'delete from ';
      final db = await database();
      db.execute(start + AccountNames.tableName);
      db.execute(start + CategoryNames.tableName);
      db.execute(start + RecurrenceNames.tableName);
      db.execute(start + TransfersNames.tableName);
      db.execute(start + PlannedTransactionNames.tableName);
      db.execute(start + SettingNames.tableName);
    } catch(error){
      throw Exception('DbBase.cleanDatabase: ' + error.toString());
    }
}

await DbBase.cleanDatabase();
await Future.delayed(Duration(seconds: 2));
String jsondata;
jsondata = await readJson;

备份和恢复。我生成一个 JSON 文件并将其保存在下载目录中。 Flutter 和 SQLite 安卓设备 我需要删除所有现有数据并读取 JSON 并作为新数据插入 我必须使用 Future.delayed(Duration(seconds: 2)) 或者在删除完成之前放入新数据。 关于这个异步问题的任何建议? 所以 1) 对所有表使用 Drop table + tableName 2) 从文件中插入新数据

【问题讨论】:

    标签: sqlite asynchronous flutter


    【解决方案1】:

    这解决了问题,事务和批处理

    static Future<void> cleanDatabase() async {
        try{
          final db = await database();
          await db.transaction((txn) async {
            var batch = txn.batch();
            batch.delete(AccountNames.tableName);
            batch.delete(CategoryNames.tableName);
            batch.delete(RecurrenceNames.tableName);
            batch.delete(TransfersNames.tableName);
            batch.delete(PlannedTransactionNames.tableName);
            batch.delete(SettingNames.tableName);
            await batch.commit();
          });
        } catch(error){
          throw Exception('DbBase.cleanDatabase: ' + error.toString());
        }
      }
    

    【讨论】:

    • 这会删除表本身还是表中的所有记录?
    • 这从数据库中删除了所有数据和表格
    • 我的应用程序需要备份和恢复,因此我生成了一个 json 文件进行备份和恢复,我删除所有内容并创建表并导入 json 文件
    【解决方案2】:
      final db = await database(); 
    
      db.delete(table);
    

    为您的代码

      db.execute(CategoryNames.tableName);
      db.execute(RecurrenceNames.tableName);
      db.execute(TransfersNames.tableName);
      db.execute(PlannedTransactionNames.tableName);
      db.execute(SettingNames.tableName);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      • 2016-12-29
      相关资源
      最近更新 更多