【发布时间】:2020-07-04 17:35:07
【问题描述】:
我有一个使用 sqflite 数据库存储的颤振应用程序。我创建了 sqflite 示例中指出的数据库 - 我使用 getDatabasesPath() 作为应用程序的相对路径,然后使用 var db = await openDatabase(path_to_db_file);。一切正常,我可以创建表格、处理数据等等。
我在卸载应用程序时遇到问题。虽然仍在开发中,但我需要添加更多表、清除数据、更改列名等。我希望在卸载应用程序后删除与其关联的所有文件,并在下一次安装(调试会话)时重新开始。这适用于某些设备。在某些情况下,卸载应用程序后会保留一些文件。数据库文件仍然存在。而且,当我安装带有预期数据库更改的新版本时,它们不会对仍未删除的数据库文件起作用。
我想问有没有一种机制可以明确告诉android在卸载它时删除与该应用相关的所有内容?
【问题讨论】:
-
您可能需要检查您的数据库版本。如果您进行更改(表更改等),您可能需要更新数据库版本。见sqflite database migration
-
感谢您的回答!我不跟踪数据库更改(模式)。我引入更改的方式(因为架构很简单)是删除数据库,然后如果文件在第一次启动时不存在,我使用新的 SQL 查询创建它。当文件出于某种原因存在时,问题就出现了。
-
不幸的是,在某些设备上,当用户卸载应用程序时,有些是完全删除应用程序及其数据,但有些只是删除应用程序本身,而数据(包括本地 sqlite 数据库)仍然存在。我个人在进行测试时不想使用数据库版本控制,我会清除我的应用程序的缓存和数据,然后最后进行卸载。
-
Yes :/ 导致问题的设备是荣耀手机。我执行“删除缓存”、“删除数据”、“卸载”,然后在安装 APK 后 - db 文件仍然存在!