• 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 数据库迁移
  • 相关阅读:
    bzoj1662: [Usaco2006 Nov]Round Numbers 圆环数
    畅通工程——D
    Constructing Roads——F
    FatMouse's Speed——J
    Tickets——H
    免费馅饼——G
    Max Sum Plus Plus——A
    Super Jumping! Jumping! Jumping!——E
    Fling——K
    #define is unsafe——I
  • 原文地址:https://www.cnblogs.com/ihojin/p/fmdb-migration.html
Copyright © 2020-2023  润新知