微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQLdelight删除所有表

如何解决SQLdelight删除所有表

我在Kotlin / Native项目(iOS和Android)中使用sqlDelight,并且我正在寻找删除DB(所有表)的最佳方法用户案例:使用从应用程序注销。因此,我一直在寻找一种从所有表中删除数据的方法。 到目前为止,我已经尝试过了,但是我无法访问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

解决方法

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

,

由于我想在数据库中保留一些不变的数据,因此original解决方案将无法工作,因此我接下来要做:

  1. 保留对SqlDriver
  2. 的引用
  3. 删除必需表
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项目

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。