iOSApp版本升级时数据库FMDB升级

FMDB数据库高级使用demo
1.数据库为什么升级?

当我们对已经建立好的数据库进行修改(添加字段)用户单纯的升级app用到这个字段必须升级,升级,升级!!!

2.为什么我们将版本信息放入数据库而不使用UserDefaults快速存储呢?

原因是你需要考虑到
当你的app有不同的用户登录时,UserDefaults是所有数据共享的,你不能根据不同的用户来处理他的信息
判段他的信息是否需要更新

3.思路

  1. 在数据库增加一张存版本号的表
  2. 当APP启动的时候判断是否是第一次安装
  3. 第一次安装更新数据库,并且把数据库的版本号储存下来

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];
    }
}
发布了128 篇原创文章 · 获赞 106 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/Z1591090/article/details/90260314