FMDB 版本迁移

FMDB 版本迁移

安装

1. 通过CocoaPods

在项目根目录创建并编辑 Podfile 内容如下

$ cd /path/to/MyProject
$ touch Podfile
$ edit Podfile
platform :ios, ‘5.0‘
# Or platform :osx, ‘10.7‘
pod ‘FMDBMigrationManager‘

导入

$ pod install

打开项目,开始使用

$ open MyProject.xcworkspace

2. 手动

添加 FMDBMigrationManager.hFMDBMigrationManager.m,在使用的地方 #import "FMDBMigrationManager.h"

使用

创建迁移表

FMDBMigrationManager *manager = [FMDBMigrationManager managerWithDatabaseAtPath:@"path/to/your/DB.sqlite" migrationsBundle:[NSBundle mainBundle]];
NSError *error = nil;
BOOL success = [manager createMigrationsTable:&error];

创建补丁文件

$ touch "`ruby -e "puts Time.now.strftime(‘%Y%m%d%H%M%S%3N‘).to_i"`"_CreateMyAwesomeTable.sql

在sql文件中写入数据库变更内容,然后添加到项目中 (Application Bundle)

迁移

FMDBMigrationManager *manager = [FMDBMigrationManager managerWithDatabaseAtPath:@"path/to/your/DB.sqlite" migrationsBundle:[NSBundle mainBundle]];
NSError *error = nil;
BOOL success = [manager migrateDatabaseToVersion:UINT64_MAX progress:nil error:&error];

检查迁移状态

FMDBMigrationManager *manager = [FMDBMigrationManager managerWithDatabaseAtPath:@"path/to/your/DB.sqlite" migrationsBundle:[NSBundle mainBundle]];
NSLog(@"Has `schema_migrations` table?: %@", manager.hasMigrationsTable ? @"YES" : @"NO");
NSLog(@"Origin Version: %llu", manager.originVersion);
NSLog(@"Current version: %llu", manager.currentVersion);
NSLog(@"All migrations: %@", manager.migrations);
NSLog(@"Applied versions: %@", manager.appliedVersions);
NSLog(@"Pending versions: %@", manager.pendingVersions);

使用记录

《新天翼视讯项目》

  1. 手动加入 FMDBMigrationManager 文件;
  2. 生成、编辑sql补丁文件,并加入项目;
    ALTER TABLE DownLoadMedia ADD resumeData;
  3. 添加迁移方法,不用指定脚本文件,会根据版本号自动识别;
    - (void)migrationDB {
    
        FMDBMigrationManager *manager = [FMDBMigrationManager managerWithDatabaseAtPath:kDATABASEFILE_PATH migrationsBundle:[NSBundle mainBundle]];
    
        NSError *error = nil;
        BOOL result = NO;
        if (!manager.hasMigrationsTable) {
            result = [manager createMigrationsTable:&error];
        }
    
        result = [manager migrateDatabaseToVersion:UINT64_MAX progress:nil error:&error];
    
        NSLog(@"Has `schema_migrations` table?: %@", manager.hasMigrationsTable ? @"YES" : @"NO");
        NSLog(@"Origin Version: %llu", manager.originVersion);
        NSLog(@"Current version: %llu", manager.currentVersion);
        NSLog(@"All migrations: %@", manager.migrations);
        NSLog(@"Applied versions: %@", manager.appliedVersions);
        NSLog(@"Pending versions: %@", manager.pendingVersions);
    }
  4. 启动自动迁移;
    + (void)load {
        [[DataCenter sharedDataCenter] migrationDB];
    }

参考:

  1. FMDB
  2. FMDBMigrationManager
  3. iOS SQLite 数据库迁移
时间: 2024-11-07 00:15:19

FMDB 版本迁移的相关文章

高版本->低版本迁移,低版本客户端连接高版本数据库EXP导出报错EXP-00008,ORA-01455,EXP-00000

生产环境: 源数据库:RHEL + Oracle 11.2.0.3 目标数据库:HP-UX + Oracle 10.2.0.4 需求:迁移部分表  11.2.0.3-->10.2.0.4,若迁移范围内的有些表在目标库已经存在,则替换. 本次迁移数据量<1G. 初定方案:低版本的客户端连接到高版本数据库,用低版本导出,低版本导入. 1.采用初定方案,目标数据库所在服务器连接到源数据库,exp导出过程中报错. ZJCRNOPDB 36: sqlplus -version SQL*Plus: Rel

SQL版本迁移

大家有没有遇到过这么一种情况:开始时使用的是高版本的sql server,但服务器使用的是低版本的sql,会出现不兼容的问题. 此时就需要版本迁移了. 1.先在高版本的环境下生成脚本文件. 需要设置 选择类型 然后到低版本,打开脚本. 点击执行,会发现"数据库不存在". 关闭管理重新打开,此时会发现数据库已经自动建立了(没有的自己新建一个),继续点执行. 如果执行有错误,可以试着多执行几次.

CoreData的简单使用(二)数据的增删改查,轻量级的版本迁移

上一篇中我们已经使用CoreData创建了一个SQLite数据库 CoreData的简单使用(一)数据库的创建 现在对数据库进行数据的CRUD(增删改查) 1.Data Model 的设置 创建一个DataModel,取名CRUD.xcdatamodeld,添加Entity(Library和Book),添加属性,在Book中设置和Library的关联关系(一个Book可以存放在一个Library里) Book的属性和关联关系(选择Destination为Library,关系名称取名为librar

CoreData数据库版本迁移--干货

CoreData使用的是第三方库MagicRecord. 版本不断覆盖时需要对数据库进行迁移,经过不断打包测试,发现以下规律: a.表中增加模型,覆盖安装后上一个版本表中数据无法再取出 b.A模型中新增加字段,覆盖安装后,访问A模型数据,程序闪退,必须删除以前版本重新安装,才能正常访问表中A模型的字段 c.A模型中删除字段,覆盖安装后,对应用无影响 所以,只要数据库表中有增加删除模型,模型增加字段等,都需要先做好版本迁移工作.具体步骤如下: 1.选中当前CoreData的工作表(LearnDri

Core Data 学习:轻量级版本迁移(Lightweight Migration)

什么时候需要版本迁移呢? 答案很简单,什么时候改变数据模型,什么时候就需要版本迁移. Core Data支持对数据模型(data model)改变的管理.改变数据模型将造成该数据模型与之前的持久化存储(stores)不兼容,而出现错误.所以,如果我们改变了自己的数据模型,就需要将原有的持久化存储中的数据转移到新的模型版本,这一过程就称为版本迁移(migration). 为什么需要进行版本迁移? 当我们发布应用之后,再添加一些新的特性,我们将需要更新持久化存储.在我们开发的过程中,很好操作,删除A

CoreData(数据库升级 )版本迁移-iOS App升级安装

版权声明:本文为博主原创文章,未经博主允许不得转载. 如果IOS App 使用到CoreData,并且在上一个版本上有数据库更新(新增表.字段等操作),那在覆盖安装程序时就要进行CoreData数据库的迁移,具体操作如下: 1.选中你的mydata.xcdatamodeld文件,选择菜单editor->Add Model Version  比如取名:mydata2.xcdatamodel 2.设置当前版本 选择上级mydata.xcdatamodeld ,在inspector中的Versione

Core Data 版本迁移经验总结

大家在学习和使用Core Data过程中,第一次进行版本迁移的经历一定是记忆犹新,至少我是这样的,XD.弄的不好,就会搞出一些由于迁移过程中数据模型出错导致的Crash.这里总结了一下Core Data版本迁移过程中的经验,希望对大家有用. 写在前面 关于Core Data版本迁移,这两篇文章都进行了分析,大家可以参考. Core Data Model Versioning and Data Migration Programming Guide 自定义 Core Data 迁移 迁移准备 1)

CoreData版本迁移

Core Data版本迁移基础 通常,在使用Core Data的iOS App上,不同版本上的数据模型变更引发的数据迁移都是由Core Data来负责完成的.这种数据迁移模式称为Lightweight Migration(可能对于开发人员来说是lightweight),开发人员只要在添加Persistent Store时设置好对应选项,其它的就交付给Core Data来做了: 从命名上可以看出这两个选项分别代表:自动迁移Persistent Store,以及自动创建Mapping Model.

微软虚拟化跨版本迁移

之前老王曾经在WSFC2008R2跨群集迁移WSFC2012R2一文中提到过虚拟化迁移,但是由于不是专门写虚拟化迁移的文章,所以写的不是很详尽,本文我们将详细讨论微软虚拟化的跨版本迁移 微软Hyper-V于2008发布,经历过2008,2008R2,2012,2012R2,2016等五个版本,其中目前国内使用最多的是2008R2,2012R2两个版本,可能大多数用户使用2008R2 Hyper-V用作过尝试测试,或者觉得2008R2 Hyper-V的性能不能满足需求,2012R2 Hyper-V