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

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

建议?

有帮助吗?

解决方案

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

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

我在我的数据库中包含一个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)数据,并为用户贡献和缓存内容提供较小的读写数据库。

其他提示

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

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

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

NSString *docDir = [arrayPaths objectAtIndex:0];
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top