【问题标题】:How to maintain data in an SQLite Database on an iPhone at a version update of the application?如何在应用程序版本更新时维护 iPhone 上 SQLite 数据库中的数据?
【发布时间】:2023-03-06 17:09:01
【问题描述】:

我的 iPhone 应用程序的第一个版本(位于应用商店)中有一个 SQLite 数据库。现在我想推出应用程序的第二个版本,其中也有一个 SQLite 数据库。

我了解到,在更新时,SQLite 数据库会被删除,然后会添加新的数据库。我不希望这种情况发生,因为该数据库包含用户保存的一些信息。更新的时候删掉就不好了。

问题是,如何将旧 SQLite(旧版本)数据库中的数据转移到新数据库中?以及如何测试将在 App Store 上发生的版本更新过程?

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: iphone objective-c sqlite


    【解决方案1】:

    答案是:从一开始就在您的应用中实施版本控制 :-)

    在这种情况下,您可以将没有版本信息的应用视为版本 1。我要做的是将数据库的版本存储在某处(可能在数据库本身内部)。当数据库打开时,根据应用期望的版本检查其版本,然后根据需要进行任何架构更改并更新存储的版本号。

    如果您没有将数据库复制到应用程序的 Documents 目录,那么这一切都没有实际意义,因为无论如何它都是只读的。否则,Documents 目录的内容会在更新之间保留。

    要测试更新,只需从您设备上先前版本的新副本开始。然后安装新的(构建和运行就可以了)。您确实保留了旧版本的应用,对吗?

    【讨论】:

    • Err...我绝对应该保留我的应用程序的旧版本。反正我要从现在开始。但我明白你在说什么,这似乎是个好主意。将应用程序的版本插入数据库是一个小技巧,但仍然是一个好方法。所以这个想法是,当应用程序启动时,您检查以查看版本号。如果数据库的版本号比应用程序本身低,那么您启动一些 SQL 语句(如创建新表等)并更新数据库中的版本,这样在下次启动应用程序时您就不必再次更新任何东西
    • 对,不过我发现最好为应用程序和数据库维护单独的版本号。否则,如果您更新应用程序但保持数据库不变,应用程序可能会错误地将更新应用到数据库。
    【解决方案2】:

    这不是我亲自测试过的,但据我所知:

    1. 您的第一个问题是been answered,简而言之,如果您的 sqlite 数据库未复制到 Documents 目录,您将不走运,因为整个应用程序包将在升级时被替换。假设 christo16 是正确的,并且假设您已经发布的应用没有将数据库复制到 Documents,您可能希望发布 确实 的临时版本这。那么在推出数据库更新之前,只需确保大量用户已安装临时版本即可。
    2. 回复:测试。您应该能够通过 iTunes 而不是通过 Build & Run 安装构建来测试升级行为。我已经有一段时间没有尝试过了……按照临时构建的说明进行操作应该可以解决问题,尽管这可能有点矫枉过正。

    【讨论】:

    • 谢谢...我想这是有道理的...但是如果对新数据库进行一些更改怎么办。例如。在这个新版本中,我添加了一个新表,但另一个表保持不变。有什么好的解决方法?
    猜你喜欢
    • 2023-03-24
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多