列出由用户/开发人员而非SQLite本身创建的表



如果我运行以下命令:

select * from sqlite_master where type = 'table';

我得到了我创建的表,还有像android_metadatasqlite_sequence这样的表。我想在我的应用程序中有一个功能,可以擦除我的表的内容,但我宁愿不触摸数据库为自己创建的表。

我列出所有表,提取它们的名称,过滤列表,并在列表上调用delete from $tablename

Future<List<QueryRow>> _getNumberOfExistingTableRows() async {
List<String> sqliteTableNames = ["android_metadata", "sqlite_sequence"];
String selectTablesSql = "select * from sqlite_master where type = 'table';";
final result = await customWriteReturning(selectTablesSql);
result.removeWhere((row) => sqliteTableNames.contains(row.data["name"]));
return result;
}
List<String> tableNameList = _queryRowsToTableNames(await _getNumberOfExistingTableRows());
for (String tableName in tableNameList) {
await customStatement("delete from $tableName;");
}

它是有效的,但如果SQLite在未来的版本中为自己创建另一个表,这也会擦除该表。

使用

SELECT * FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%' AND name NOT LIKE 'android_%';`

应该做到这一点。

最新更新