使用FMDB结合FMDBMigrationManager(一个三方库)的方式
1、首先自定义一个sql语句的类
#import#import"FMDBMigrationManager.h"
@interfaceMigration:NSObject
- (instancetype)initWithName:(NSString*)name andVersion:(uint64_t)version andExecuteUpdateArray:(NSArray*)updateArray;//自定义方法@property(nonatomic,readonly)NSString*name;
@property(nonatomic,readonly) uint64_t version;
- (BOOL)migrateDatabase:(FMDatabase )database error:(outNSError__autoreleasing *)error;
@end
#import"Migration.h"
@interfaceMigration()
@property(nonatomic,copy)NSString * myName;
@property(nonatomic,assign)uint64_t myVersion;
@property(nonatomic,strong)NSArray * updateArray;
@end
@implementationMigration
- (instancetype)initWithName:(NSString *)name andVersion:(uint64_t)version andExecuteUpdateArray:(NSArray *)updateArray
{
if(self=[superinit]) {
_myName=name;
_myVersion=version;
_updateArray=updateArray;
}
returnself;
}
- (NSString *)name
{
return_myName;
}
- (uint64_t)version
{
return_myVersion;
}
- (BOOL)migrateDatabase:(FMDatabase *)database error:(outNSError __autoreleasing)error
{
for(NSString * updateStrin_updateArray)
{
[database executeUpdate:updateStr];
}
returnYES;
}
@end
2、每次升级数据库只要创建新的sql语句的对象就好
FMDBMigrationManager * manager=[FMDBMigrationManager managerWithDatabaseAtPath:DBPath migrationsBundle:[NSBundle mainBundle]];
Migration * migration_1=[[Migration alloc]initWithName:@"新增USer表"andVersion:1andExecuteUpdateArray:@[@“create table User(name text,age integer)”]];
Migration * migration_2=[[Migration alloc]initWithName:@"USer表新增字段email"andVersion:2andExecuteUpdateArray:@[@“alter table User add email text”]];
Migration * migration_3=[[Migration alloc]initWithName:@"USer表新增字段address"andVersion:3andExecuteUpdateArray:@[@“alter table User add address text”]];
[manager addMigration:migration_1];
[manager addMigration:migration_2];
[manager addMigration:migration_3];
BOOLresultState=NO;
NSError* error=nil;
if(!manager.hasMigrationsTable) {
resultState=[manager createMigrationsTable:&error];
}
resultState=[manager migrateDatabaseToVersion:UINT64_MAXprogress:nilerror:&error];