0
点赞
收藏
分享

微信扫一扫

iOS 数据库升级

kmoon_b426 2024-05-14 阅读 11

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

举报

相关推荐

0 条评论