iOS 数据库升级

使用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];

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值