9

我在 iPhone 应用程序中使用 sqlite 作为数据源。我有两个关于应用程序升级的问题。

1.) 数据都是配置/非事务性的。意思是,它是只读的。当我更新/添加配置数据时,我将为应用程序发布升级。当用户获得更新的 iPhone 应用程序时,是否会卸载原来的应用程序?如果是这种情况,我很好,因为将部署新的数据库配置数据。如果不是这种情况,我该如何替换数据?

2.) 数据是配置和事务性的。这意味着用户可以将数据保存到数据库中。当用户升级到应用程序的新版本时,我想维护他们现有的数据但替换所有配置数据。我猜我需要在应用程序中存储 INSERT 和 UPDATE 脚本才能完成此操作。什么是有效的方法?

4

2 回答 2

11

cdespinosa 已经很好地描述了场景 #1,所以我将处理 #2。

我还没有在 iPhone 上这样做过,但在桌面环境中,最简单的处理方法是将配置数据保存在单独的数据库中。您可以很容易地附加到多个数据库。首先打开您的主数据库,它可能应该是可以更改的数据库。然后sqlite3_exec是一个ATTACH语句,如下所示:

ATTACH 'filepath' AS config;

从那时起,您可以执行以下操作:

SELECT * FROM UserTableName;
SELECT * FROM config.ConfigurationTableName;

我的理解是,如果您写入配置数据库,应用程序将无法通过签名检查并且无法启动,并且 iPhone 附带的 SQLite 版本太旧,不支持只读标志。出于这个原因,您应该将配置数据库文件复制到沙箱中并打开该副本,而不是捆绑包中的那个。

(当然,您可以使用 SQL 并将值从一个数据库复制到另一个数据库。但是,如果您已经将整个配置数据库复制到您的沙箱......并且您应该......那么这只是一个额外的步骤。附上就好。)

我希望其他人可以为您提供更多详细信息。:)

于 2009-02-28T02:02:20.883 回答
5

当用户升级应用程序时,旧的应用程序包被卸载并安装了新的应用程序包,但与应用程序包关联的用户数据是完整的。

因此,您的选择是 a) 将数据保留在应用程序包中(它将被自动替换)或 b) 在首次运行时单方面将其复制到用户数据区域(因此您将在升级时有意替换它)。

我会将 #2 留给熟悉 sqlite 的人,但如果您实际上正在这样做,您可能想要使用“sqlite”标签而不是“mysql”标签。

于 2009-02-17T17:13:09.677 回答