如何在应用程序版本更新时维护iPhone上SQLite数据库中的数据?

如何在应用程序版本更新时维护iPhone上SQLite数据库中的数据?,iphone,objective-c,sqlite,Iphone,Objective C,Sqlite,我的iPhone应用程序的第一个版本中有一个SQLite数据库(在app store上)。现在,我想推出该应用程序的第二个版本,其中还包含一个SQLite db 我了解到,在更新之后,SQLite数据库将被删除,然后添加新数据库。我不希望发生这种情况,因为该数据库保存了用户保存的一些信息。如果它在更新时被删除,那就不好了 问题是,如何将数据从旧SQLite(旧版本)数据库传输到新数据库?如何测试应用商店上的版本更新过程? 任何帮助都将不胜感激。谢谢。这不是我个人测试过的,但据我所知: 你的第一个

我的iPhone应用程序的第一个版本中有一个SQLite数据库(在app store上)。现在,我想推出该应用程序的第二个版本,其中还包含一个SQLite db

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

问题是,如何将数据从旧SQLite(旧版本)数据库传输到新数据库?如何测试应用商店上的版本更新过程?


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

这不是我个人测试过的,但据我所知:

  • 你的第一个问题是,简短的是,如果你的sqlite数据库没有复制到Documents目录,你就不走运了,因为整个应用包在升级时都会被替换。假设
    christo16
    是正确的,并且假设您已经发布的应用程序没有将db复制到文档中,您可能希望发布一个临时版本来执行此操作。那么,在推出db更新之前,只需确保有足够数量的用户安装了临时版本
  • 回复:测试。您应该能够通过iTunes而不是通过build&Run安装您的构建来测试升级行为。我已经有一段时间没有尝试过了……按照特别构建的说明应该可以做到,尽管这可能有些过分

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

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

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


    要测试更新,只需在您的设备上使用以前版本的新副本即可。然后安装新的(构建并运行就可以了)。您确实保留了应用程序的旧版本,对吗?

    谢谢……我想这是有道理的……但如果新数据库有几处更改呢。在这个新版本中,我添加了一个新表,但另一个表未被更改。解决这个问题的好办法是什么?呃……我绝对应该保留我的应用程序的旧版本。不管怎样,我将从现在开始。但我明白你的意思,这似乎是个不错的主意。将应用程序的版本插入数据库是一个小把戏,但仍然是一个好把戏。因此,当应用程序启动时,您可以查看版本号。如果db的版本号低于应用程序本身,那么您可以启动一些SQL语句(如创建新表等)并在数据库中更新版本,这样在下次启动应用程序时,您就不必再次更新任何内容,虽然我发现最好为应用程序和数据库分别维护版本号。否则,如果您更新应用程序但保持数据库不变,则应用程序可能会错误地将更新应用于数据库。