iphone - iphone 应用程序更新期间的 sqlite DB 待办事项

标签 iphone sqlite

我有一些关于涉及 sqlite 数据库的 iphone 应用程序更新的一般性问题。

  1. 随着新的更新,现有的 sqlite 数据库是否会被新数据库的副本覆盖?

  2. 如果更新不涉及任何架构更改,那么用户应该能够将现有数据库与他们保存的数据一起使用,对吗? (如果现有数据库没有从上面的 1 中被覆盖)

  3. 如果架构发生变化,将数据从旧数据库传输到新数据库的最佳方式是什么?有人可以给我指南和示例代码吗?

最佳答案

  1. 仅替换应用程序包内的文件。如果数据库文件在您应用程序的文档目录中,则不会被替换。 (请注意,如果您更改应用程序包中的文件,代码签名将不再有效,应用程序将不会启动。因此除非您使用只读数据库,否则它必须位于 Documents 目录中。)

  2. 是。

  3. 什么是最好的取决于数据。您不会找到此类通用问题的示例代码。首先,您需要检测您的应用程序是否使用旧的数据库版本运行。然后你需要升级它。

检查版本:

  • 您可以为新架构使用不同的文件名。如果 Version2.db 不存在但 Version1.db 存在,则进行升级。
  • 您可以在您的数据库中嵌入一个架构版本。我有一个名为 metadata 的表,其中包含 namevalue 列。我用它来存储一些通用值,包括 dataversion 数字。我在打开数据库时检查那个数字,如果它低于当前版本,我会进行升级。
  • 除了创建表,您还可以使用 sqlite 的内置 user_version pragma检查并存储版本号。
  • 您可以直接检查表结构:查找列或表是否存在。

升级:

  • 您可以使用一系列 SQL 命令就地升级。您甚至可以将 SQL 文件作为资源存储在您的应用程序包中,然后将其简单地传递给 sqlite3_exec 以完成所有工作。 (在事务中执行此操作,以防出现问题!)
  • 您可以通过将数据从一个数据库文件复制到一个新文件来升级。

如果您的升级可能会运行很长时间(超过一秒),您应该显示一个升级屏幕,向用户解释发生了什么。

关于iphone - iphone 应用程序更新期间的 sqlite DB 待办事项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4139876/

相关文章:

iphone - 版本更新时的数据备份。应用商店

delphi - 使用Delphi进行SQLite归档

ruby-on-rails - 在 Postgresql 中按字母搜索与 ActiveRecord 中的 sqlite3

java - 将 SQLite 数据库转换为 csv

iphone - 如果在越狱的iPhone OS 2.2.1(libgcc版本?)上调试,iPhone应用程序将崩溃。

iPhone 图像大小

android - Android Eclipse 项目中是否允许用户定义的目录名称

sqlite - sqlite vs隔离存储(Windows Phone)

ios - 快速 watch 连接意外退出

ios - 将 lame mp3 编码器链接到 iOS 应用程序时如何解决 "Undefined symbol init_xrpow_core_sse"?