如何解决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
解决方案将无法工作,因此我接下来要做:
- 保留对
SqlDriver
的引用
- 删除必需表
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 举报,一经查实,本站将立刻删除。