SQLdelight 删除所有表
SQLdelight drop all tables
我在 Kotlin/Native 项目 (iOS & Android) 中使用 SQLDelight,我正在寻找删除数据库的最佳方法(所有 table)。
用户案例:使用从应用程序注销。 所以,我一直在寻找一种方法来清除所有 table 中的数据。
到目前为止我试过了,但我无法访问 sqlite_master
table:
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
删除所有 table 的最佳方法是什么?(我想避免写 DROP TABLE
每个 table)
此外,upsert {
似乎也不适合我。不知道如何为它提供 label
。
如果您不关心 dB 中的任何内容并希望它完全清除,您可以关闭连接并删除文件,下次打开连接时它将重新创建 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项目
我在 Kotlin/Native 项目 (iOS & Android) 中使用 SQLDelight,我正在寻找删除数据库的最佳方法(所有 table)。
用户案例:使用从应用程序注销。 所以,我一直在寻找一种方法来清除所有 table 中的数据。
到目前为止我试过了,但我无法访问 sqlite_master
table:
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
删除所有 table 的最佳方法是什么?(我想避免写 DROP TABLE
每个 table)
此外,upsert {
似乎也不适合我。不知道如何为它提供 label
。
如果您不关心 dB 中的任何内容并希望它完全清除,您可以关闭连接并删除文件,下次打开连接时它将重新创建 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项目