0

我在 Kotlin/Native 项目(iOS 和 Android)中使用 SQLDelight,我正在寻找删除数据库(所有表)的最佳方法。 用户案例:使用从应用程序中注销。所以,我一直在寻找一种方法来擦除所有表中的数据。到目前为止,我尝试了这个,但我无权访问sqlite_master表:

dropAllTables:
  PRAGMA writable_schema = 1;
  DELETE FROM sqlite_master WHERE type IN ('table', 'index', 'trigger');
  PRAGMA writable_schema = 0;
  VACUUM;
  PRAGMA INTEGRITY_CHECK;

错误:No table found with name sqlite_master

删除所有表格的最佳方法是什么SQLDeligth(我想避免写DROP TABLE每张桌子)

此外,upsert {似乎对我也不起作用..不知道如何提供label它。

4

2 回答 2

2

如果您不关心分贝中的任何内容并希望完全清除它,您可以关闭连接并删除文件,下次打开连接时它将重新创建分贝

于 2020-09-06T10:31:14.227 回答
0

由于我想在数据库中保留一些不可变的数据,因此该original解决方案将不起作用,所以我接下来做了:

  1. 保留参考SqlDriver
  2. 删除所需的表
val cursor = sqlDriver.executeQuery(
            null,
            "SELECT name FROM sqlite_master WHERE type = 'table' " +
                    //system tables
                    "AND name NOT LIKE '%sqlite%' " +
                    "AND name NOT LIKE '%metadata%' " +
                    "AND name NOT LIKE '%ios%' " +
                    "AND name NOT LIKE '%android%' " +
                    //immutable tables
                    "AND name != 'MySomeTalbe';",
            0
        )
        while (cursor.next()) {
            cursor.getString(0)?.let {
                sqlDriver.execute(null, "DELETE FROM $it", 0)
            }
        }

注意:它是 Kotlin/Native 项目

于 2020-10-03T12:16:26.763 回答