我正在尝试将我的sqlite数据库的更新版本推送到我的设备,到目前为止还没有想出办法,除了每次重命名(痛苦)。陈旧(缓存?)副本将永久保留在设备上。
我了解如何通过清除/ applications文件夹将更新版本添加到模拟器中,但这似乎不会影响物理设备。
建议?
答案 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];