在iPhone上刷新数据库

时间:2009-11-28 23:25:09

标签: iphone database refresh

我正在尝试将我的sqlite数据库的更新版本推送到我的设备,到目前为止还没有想出办法,除了每次重命名(痛苦)。陈旧(缓存?)副本将永久保留在设备上。

我了解如何通过清除/ applications文件夹将更新版本添加到模拟器中,但这似乎不会影响物理设备。

建议?

2 个答案:

答案 0 :(得分:1)

如果更新应用程序时数据库文件是应用程序包的一部分,则您将更新数据库。

如果数据库不是应用程序包的一部分,但是处于读写空间(如文档目录),则需要实现自己的策略。

我在我的数据库中包含一个schema_version表:

create table schema_version (
  version integer not null
);

然后在app启动时,我检查当前版本,然后在我的app目录中查找update-schema- [N + 1] .sql文件以作为更新应用。因此,如果我的模式版本是4,我将检查update-schema-5.sql等(并根据需要重复此操作,直到我用完update-schema-N.sql文件为止。)

请注意,iphone上的sqlite写入性能并不是那么好。如果您需要更新200K数据库行,您可能需要找出一些方法让用户在进行中时保持乐趣。

我的应用程序使用混合方法,我们在只读数据库中拥有大部分(60 MB)数据,并为用户贡献和缓存内容提供较小的读写数据库。

答案 1 :(得分:0)

您可以编写OS X命令行应用程序来“区分”旧数据库和新数据库。然后向设备发送所有添加,删除和更新的JSON对象(或XML),并将它们应用于现有存储。

您还可以在首次运行应用时将商店复制到Documents文件夹,然后从那里读取。 Documents文件夹具有读/写/删除权限,因此我认为你可以将新的文件放入。你可以像这样获得这条路径。

NSArray *arrayPaths = NSSearchPathForDirectoriesInDomains(
            NSDocumentDirectory,
            NSUserDomainMask,
            YES);

NSString *docDir = [arrayPaths objectAtIndex:0];