iOS / SQL:在应用更新后自动添加缺失列/删除缺失列?

时间:2017-03-28 01:46:05

标签: ios objective-c database sqlite fmdb

目前,我已经创建了一个这样的表。

[self.fmDataBase executeUpdate:@"create table test (id integer primary key autoincrement, test text);"];

这很好用,但是将来我需要更多列才能获得我的表格。它看起来就像这样。

[self.fmDataBase executeUpdate:@"create table test (id integer primary key autoincrement, test text, test1 text);"];

不完全确定如何处理这种情况。随着时间的推移,我将需要添加列,删除列甚至更改列的名称。我想做这样的事情

 if (version_1.1) {
     [self.fmDataBase executeUpdate:@"alter table test add test1 text"];
    } else if (version_1.2) {
     [self.fmDataBase executeUpdate:@"alter table test add test2 text"];
    } else if (version_1.3) {
     [self.fmDataBase executeUpdate:@"alter table test add test3 text"];
    }

或者通过某种方式比较查询并自动对其进行更改是否有办法实现?我想确保用户更新应用程序时应用程序不会中断。似乎到目前为止我必须为每个应用程序版本手动更新它。

1 个答案:

答案 0 :(得分:0)

我真的不知道FMDB但是...如果您使用CoreData,它会自动为您处理。只要它具有每个数据模型版本的记录,它就会将 任何 以前版本的数据库迁移到启动时的最新版本。

初始化持久性存储协调器时,请为其指定以下标志:

NSDictionary *migrationOptions =@{NSMigratePersistentStoresAutomaticallyOption:@(YES),
                                  NSInferMappingModelAutomaticallyOption:@(YES)};

对于数据库中的简单增量(例如,添加/删除表和字段,而不是关系的东西),这就足够了,并且工作正常。