如何在应用程序版本更新时维护 iPhone 上 SQLite 数据库中的数据?
Posted
技术标签:
【中文标题】如何在应用程序版本更新时维护 iPhone 上 SQLite 数据库中的数据?【英文标题】:How to maintain data in an SQLite Database on an iPhone at a version update of the application? 【发布时间】:2011-04-05 16:20:15 【问题描述】:我的 iPhone 应用程序的第一个版本(位于应用商店)中有一个 SQLite 数据库。现在我想推出应用程序的第二个版本,其中也有一个 SQLite 数据库。
我了解到,在更新时,SQLite 数据库会被删除,然后会添加新的数据库。我不希望这种情况发生,因为该数据库包含用户保存的一些信息。更新的时候删掉就不好了。
问题是,如何将旧 SQLite(旧版本)数据库中的数据转移到新数据库中?以及如何测试将在 App Store 上发生的版本更新过程?
任何帮助将不胜感激。谢谢。
【问题讨论】:
【参考方案1】:答案是:从一开始就在您的应用中实施版本控制 :-)
在这种情况下,您可以将没有版本信息的应用视为版本 1。我要做的是将数据库的版本存储在某处(可能在数据库本身内部)。当数据库打开时,根据应用期望的版本检查其版本,然后根据需要进行任何架构更改并更新存储的版本号。
如果您没有将数据库复制到应用程序的 Documents 目录,那么这一切都没有实际意义,因为无论如何它都是只读的。否则,Documents 目录的内容会在更新之间保留。
要测试更新,只需从您设备上先前版本的新副本开始。然后安装新的(构建和运行就可以了)。您确实保留了旧版本的应用,对吗?
【讨论】:
Err...我绝对应该保留我的应用程序的旧版本。反正我要从现在开始。但我明白你在说什么,这似乎是个好主意。将应用程序的版本插入数据库是一个小技巧,但仍然是一个好方法。所以这个想法是,当应用程序启动时,您检查以查看版本号。如果数据库的版本号比应用程序本身低,那么您启动一些 SQL 语句(如创建新表等)并更新数据库中的版本,这样在下次启动应用程序时您就不必再次更新任何东西 对,不过我发现最好为应用程序和数据库维护单独的版本号。否则,如果您更新应用程序但保持数据库不变,应用程序可能会错误地将更新应用到数据库。【参考方案2】:这不是我亲自测试过的,但据我所知:
-
您的第一个问题是been answered,简而言之,如果您的 sqlite 数据库未复制到 Documents 目录,您将不走运,因为整个应用程序包将在升级时被替换。假设
christo16
是正确的,并且假设您已经发布的应用没有将数据库复制到 Documents,您可能希望发布 确实 的临时版本这。那么在推出数据库更新之前,只需确保大量用户已安装临时版本即可。
回复:测试。您应该能够通过 iTunes 而不是通过 Build & Run 安装构建来测试升级行为。我已经有一段时间没有尝试过了……按照临时构建的说明进行操作应该可以解决问题,尽管这可能有点矫枉过正。
【讨论】:
谢谢...我想这是有道理的...但是如果对新数据库进行一些更改怎么办。例如。在这个新版本中,我添加了一个新表,但另一个表保持不变。有什么好的解决方法?以上是关于如何在应用程序版本更新时维护 iPhone 上 SQLite 数据库中的数据?的主要内容,如果未能解决你的问题,请参考以下文章
尝试启动“应用程序名称”时,无法在“D's iPhone”上启动调试服务器[关闭]