首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLdelight删除所有表

SQLdelight删除所有表
EN

Stack Overflow用户
提问于 2020-09-06 09:16:30
回答 2查看 1.3K关注 0票数 0

我正在Kotlin/Native (iOS & Android)中使用iOS,我正在寻找删除DB (所有表)的最佳方法。用例:从应用程序中注销。所以,我在寻找一种从所有表中删除数据的方法。到目前为止,我尝试过这样做,但我无法访问sqlite_master表:

代码语言:javascript
复制
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**?**删除所有表的最佳方法是什么(我希望避免从每个表中写入SQLDeligth**?**)

而且,upsert {似乎也不适合我。不知道如何为它提供label

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-06 10:31:14

如果您不关心dB中的任何内容,并且希望它完全清除,您只需关闭连接并删除文件,下次打开连接时,它将重新创建db。

票数 2
EN

Stack Overflow用户

发布于 2020-10-03 12:16:26

由于我希望在DB中保留一些不可变的数据,所以original解决方案将无法工作,因此我接下来做了如下工作:

SqlDriver

  • Drop

  • 保持对必需表的引用

代码语言:javascript
复制
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/本地项目

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63762539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档