2009-02-16 131 views
9

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

1.)数据全部为config/nontransactional。意思是,它是只读的。当我更新/添加配置数据时,我会为应用程序进行升级。当用户获得更新的iPhone应用程序时,原件是否被卸载?如果是这样的话,我很好,因为新的db配置数据将被部署。如果情况并非如此,我该如何替换数据?

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

+0

你是说你在iPhone上安装MySQL?我严重怀疑这可以工作。还是你说iPhone正在某个服务器上查询MySQL数据库? – 2009-02-16 18:15:59

+0

是的 - mysql在iPhone上,这是一种常见的情况。明确地说,问题在于iPhone开发人员。 – 4thSpace 2009-02-16 18:27:49

回答

11

cdespinosa已经描述了场景#1,所以我会解决#2。

我还没有在iPhone上完成这项工作,但在桌面环境中,处理这个问题的最简单方法是将配置数据保存在单独的数据库中。您可以轻松地连接到多个数据库。首先打开主数据库,该数据库可能是可以更改的数据库。然后sqlite3_execATTACH语句,它看起来是这样的:

ATTACH 'filepath' AS config; 

从此,你可以做这样的事情:

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

这是我的理解是,如果你写的配置数据库的应用程序将未通过签名检查并且无法启动,并且iPhone附带的SQLite版本已经足够老,不支持只读标志。出于这个原因,您应该将配置数据库文件复制到沙箱中,并打开该副本而不是捆绑软件中的那个。 (当然,你可以使用SQL并将数据从一个数据库复制到另一个数据库中,但是如果你已经将整个配置数据库复制到你的沙箱中,那么你应该......那么这只是一个额外的步骤,只需附上)

我希望别人能为您提供更多的细节。 :)

5

当用户升级应用程序时,将卸载旧的应用程序包并安装新的应用程序包,但与应用程序包关联的用户数据保持不变。

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

我将#2留给一个sqlite-knowledgable的人,但如果这就是您实际正在做的事情,您可能想使用“sqlite”标记而不是“mysql”标记。

相关问题