【问题标题】:SQLite database when updating the app on the store更新商店中的应用程序时的 SQLite 数据库
【发布时间】:2014-12-09 23:08:10
【问题描述】:

我在我的 iOS 应用程序中使用 sqlite,我的数据库文件名为 data.db。 假设我只有一张桌子,我将应用程序推送到 AppStore。 在下一个版本中,我更新了 data.db 并添加了另一个表并将应用程序推送到 AppStore。 所以问题是,拥有旧版本并更新应用程序的用户,他会拥有带有 2 个表的新 data.db 吗?还是他保留旧的data.db? 如果他保留旧的,如何以编程方式更新他的 data.db?如果他会得到新的,那么如果我将他的个人数据存储在 data.db 中可能是个坏主意。

【问题讨论】:

    标签: ios sqlite app-store updates


    【解决方案1】:

    当您分发带有数据库的应用程序时,该数据库存储在捆绑包中。如果用户需要更新数据库,应用程序无法以编程方式更新包中的文件,因此您通常将数据库从包中复制到 Documents 文件夹(如果您还没有这样做的话),然后应用程序可以更新包含来自用户的新信息的文档版本。

    当您分发应用程序的更新时,捆绑包中的文件会被替换/更新,但用户在 Documents 文件夹中的副本会保留在那里,除非您以编程方式显式删除它(或用户手动卸载应用程序)。因此,使用您的示例,包中的数据库将有两个表(但没有用户的数据),而 Documents 文件夹中的副本将只有一个表(但有用户的数据)。

    如果您想要一个包含两个表和用户数据的单一数据库,则必须将新的两个表数据库复制到 Documents 文件夹,然后使用旧 Documents 中的用户数据更新此版本数据库。或者,您可以包含一个更改用户数据库的脚本,以便它现在包含两个表(例如,执行必要的 ALTER TABLE 和 CREATE TABLE)。

    顺便说一句,跟踪数据库的版本很有用,方法是包含保存此信息的“配置”表,或者利用user_versionschema_version 编译指示。这样,您可以以编程方式检查数据库并确定您可能需要采取的措施。

    【讨论】:

    • 谢谢,这很有用。而在我的情况下,我不会保存用户的个人数据,所以最好是覆盖旧数据库,让用户使用我新的两表数据库。所以我不需要做任何特别的事情,我只需手动更新我的数据库,并让它由应用程序更新。
    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多