iOSApp版本升级时数据库FMDB升级
目录
iOSApp版本升级时数据库FMDB升级
1.数据库为什么升级?
当我们对已经建立好的数据库进行修改(添加字段)用户单纯的升级app用到这个字段必须升级,升级,升级!!!
为什么我们将版本信息放入数据库而不使用UserDefaults快速存储呢?
原因是你需要考虑到
当你的app有不同的用户登录时,UserDefaults是所有数据共享的,你不能根据不同的用户来处理他的信息
判段他的信息是否需要更新
3.思路
- 在数据库增加一张存版本号的表
- 当APP启动的时候判断是否是第一次安装
- 第一次安装更新数据库,并且把数据库的版本号储存下来
4.代码
1.是否升级数据库
从库里面和当前的版本信息进行对比
static BOOL isAppUpdate(void)
{
BOOL isUpdate = NO;
NSString *storePath = appInfoServerUtil.getDBFilePath();
NSFileManager *fileManager = [NSFileManager defaultManager];
if([fileManager fileExistsAtPath:storePath])
{
id<FMDBAppUpgradeDBHelperInterface>verSqlDBHelper = [FMDBAppUpgradeFactory getAppUpgradeDBHelper];
NSString *sqlVersion = [verSqlDBHelper getAppVersionInfo];
//数据库版本与程序版本不一致
if (![sqlVersion isEqualToString:FMDBReleaseCurrentVersion])
{
isUpdate = YES;
}
}
return isUpdate;
}
2.升级数据库
-(void)p_setupdateCurrentDB
{
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *storePath = appInfoServerUtil.getDBFilePath();
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:kDatabaseDBName
ofType:kDBFileSuffix];
NSError *error = nil;
//如果bundle存在才会进行替换
if(bundlePath)
{
[fileManager removeItemAtPath:storePath error:&error];
[fileManager copyItemAtPath:bundlePath toPath:storePath error:&error];
}
//更新数据库版本字段
if(!error)
{
id<FMDBAppUpgradeDBHelperInterface> verSqliteEngine = [FMDBAppUpgradeFactory getAppUpgradeDBHelper];
[verSqliteEngine updateAppVersion:FMDBReleaseCurrentVersion];
}
}