我在我的iOS应用程序中使用sqlite,我的数据库文件名为data.db. 让我们假设我只有一个表,然后将应用程序推送到AppStore。 在下一个版本中,我更新了data.db并添加了另一个表并将应用程序推送到AppStore。 所以问题是,拥有旧版本并更新应用程序的用户,他将拥有带有2个表的新data.db吗?或者他保留旧的data.db? 如果他保留旧的,如何以编程方式更新他的data.db?如果他将获得新的,那么如果我将他的个人数据存储在data.db中可能是一个坏主意。
答案 0 :(得分:3)
当您使用数据库分发应用程序时,该数据库将存储在该数据包中。如果用户需要更新数据库,则应用程序无法以编程方式更新捆绑包中的文件,因此您通常将数据库从捆绑包复制到Documents文件夹(如果尚未这样做),然后应用程序可以更新带有来自用户的新信息的文档版本。
当您分发应用程序的更新时,将更换/更新软件包中的文件,但除非您以编程方式明确删除(或用户手动卸载应用程序),否则Documents文件夹中的用户副本将保留在那里。因此,使用您的示例,捆绑包中的数据库将具有两个表(但没有用户的数据),并且Documents文件夹中的副本将只有一个表(但包含用户的数据)。
如果您想要一个包含两个表的数据库,还有用户的数据,则必须将新的两个表数据库复制到Documents文件夹,然后使用旧文档中的用户数据更新此版本数据库。或者,您可以包含一个更改用户数据库的脚本,以便它现在包含两个表(例如,执行必要的ALTER TABLE和CREATE TABLE)。
顺便说一下,通过包含保存此信息的“配置”表或利用user_version
或schema_version
编译指示来跟踪数据库的版本是很有用的。 。这样,您就可以以编程方式检查数据库并确定可能需要采取的操作。