数据库更新迭代方法一:
http://blog.csdn.net/shan1991fei/article/details/50894436
这是一种原始的写法。
数据库更新迭代方法一:
pod 'FMDB', '~> 2.6.2'
pod 'FMDBMigrationManager', '~>1.4.1'
#pragma mark - 迁移
-(void)migrations
{
//删除列:@"alter table record drop column name"
dispatch_sync([QueueFetcher getInstance].dbQueue, ^{
//数据库版本升级//DBPath是要升级的数据库的地址
NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *dpPath = [docsPath stringByAppendingPathComponent:_NAME_DATABASE];
NSLog(@"这是迁移数据库地址:==%@",dpPath);
// [NSBundle mainBundle]是保存数据库升级文件的位置 根据自己放文件的位置定 升级文件是什么下面会说
FMDBMigrationManager *manger = [FMDBMigrationManager managerWithDatabaseAtPath:dpPath migrationsBundle:[NSBundle mainBundle]];
NSString *strDBM1_1 = [NSString stringWithFormat:@"alter table %@ add %@ text",TABLE_NAME,EMAIL];
MigrationZ *migraA_1 = [[MigrationZ alloc]initWithName:@"添加邮箱email字段" andVersion:_DB_V_2 andExecuteUpdateArray:@[strDBM1_1]];
[manger addMigration:migraA_1];
NSError * error;
BOOL result =NO;
if (!manger.hasMigrationsTable) {
result=[manger createMigrationsTable:&error];
}
result=[manger migrateDatabaseToVersion:UINT64_MAX progress:nil error:&error];
if(result)
{
NSLog(@"迁移表成功 %@",TABLE_NAME);
}
else
{
NSLog(@"迁移表失败 %@",TABLE_NAME);
}
/**
//第二种方式:
MigrationZ * migration_1=[[MigrationZ alloc]initWithName:@"新增USer表" andVersion:1 andExecuteUpdateArray:@[@"create table User(name text,age integer)",@"create table Zhuzhu(name text,age integer)",@"create table Dong(name text,age integer)"]];
MigrationZ * migration_2=[[MigrationZ alloc]initWithName:@"USer表新增字段email,Zhuzhu表新增字段email" andVersion:2 andExecuteUpdateArray:@[@"alter table User add email text",@"alter table Zhuzhu add email text"]];
MigrationZ * migration_3=[[MigrationZ alloc]initWithName:@"USer表新增字段adrive" andVersion:3 andExecuteUpdateArray:@[@"alter table User add adrive text",@"alter table Dong add adrive text"]];
[manager addMigration:migration_1];
[manager addMigration:migration_2];
[manager addMigration:migration_3];*/
});
}
使用第三方:经测试使用稳定。有一个小技巧:只要有表发生改变时
“andVersion:_DB_V_2“就增加。