我在iPhone应用程序中使用sqlite作为数据源.关于应用程序升级,我有两个问题.
1.)数据都是config/nontransactional.意思是,只读.当我更新/添加配置数据时,我将为该应用程序发布升级.当用户获得更新的iPhone应用程序时,是否会卸载原始应用程序?如果是这种情况,我很好,因为将部署新的db配置数据.如果不是这样,我该如何替换数据?
2.)数据是配置和事务性的.这意味着用户可以将数据保存到数据库中.当用户升级到新版本的应用程序时,我想维护其现有数据但替换所有配置数据.我猜我需要在应用程序中存储INSERT和UPDATE脚本来完成此任务.什么是有效的方法呢?
cdespinosa已经很好地描述了场景#1,所以我将解决#2问题.
我还没有在iPhone上完成此操作,但在桌面环境中,处理此问题的最简单方法是将配置数据保存在单独的数据库中.您可以轻松地附加到多个数据库.首先打开您的主数据库,该主数据库应该是可以更改的数据库.然后sqlite3_exec
是一个ATTACH
声明,如下所示:
ATTACH 'filepath' AS config;
从那时起,你可以这样做:
SELECT * FROM UserTableName; SELECT * FROM config.ConfigurationTableName;
我的理解是,如果您写入配置数据库,应用程序将无法通过签名检查而无法启动,并且iPhone附带的SQLite版本已足够大,不支持只读标志.因此,您应该将配置数据库文件复制到沙箱中并打开该副本而不是捆绑中的副本.
(当然,您可以使用SQL并将值从一个数据库复制到另一个数据库.但是如果您已经将整个配置数据库复制到沙箱中......那么您应该...那么这只是一个额外的步骤.请附上.)
我希望其他人能为您提供更多细节.:)
当用户升级应用程序时,将卸载旧的应用程序包并安装新的应用程序包,但与应用程序包关联的用户数据完好无损.
因此,您的选择是:a)将数据保留在应用程序包中(它将自动替换)或b)在首次运行时单方面将其复制到用户数据区域(因此您将在升级时有意替换它).
我会把#2留给一个知识渊博的人,但你可能想要使用"sqlite"标签而不是"mysql"标签,如果你正在做的那样的话.