5 Star 12 Fork 2

Aron / YTBaseDBManager

Create your Gitee Account
Explore and code with more than 8 million developers,Free private repositories !:)
Sign up
This repository doesn't specify license. Please pay attention to the specific project description and its upstream code dependency when using it.
Clone or Download
README.md 2.37 KB
Copy Edit Web IDE Raw Blame History
Aron authored 2020-08-13 17:44 . update README.md.

YTBaseDBManager

IOS数据库升级数据数据迁移的解决方案

原理分析

IOS 数据库升级数据迁移解决方案

安装

使用 Pod 导入,因为是开发库,所以需要指定 :path 参数

pod 'YTBaseDBManager', :path => '../'

使用

客户端使用的DEMO代码如下

  1. 客户端使用方法 [self setDBFilePath:DBPath newDBVersion:DB_Version]; 设置数据库路径
  2. 客户端重写模板方法 initTables 执行创建表的逻辑
  3. 底层库会自动分析新表和旧表,自动进行数据迁移的操作
/** 数据库保存的缓存目录 */
static NSString* kDBCache = @"DBCache";
/** 数据库文件名称 */
static NSString* DB_NAME = @"YTDB.sqlite";
/** 当前使用的数据库版本,程序会根据版本号的改变升级数据库以及迁移旧的数据 */
static NSString* DB_Version = @"1.0.1";

@implementation YTBusinessDBManager

// 子类的单例
+ (instancetype)sharedInstance{
    static id instance;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[self alloc] init];
    });
    return instance;
}

- (instancetype)init {
    self = [super init];
    if (self) {
        // 创建数据库文件
        NSString* cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
        NSString *DBDir = [cachePath stringByAppendingPathComponent:kDBCache];
        BOOL isDir = NO;
        if (!([[NSFileManager defaultManager] fileExistsAtPath:DBDir isDirectory:&isDir] && isDir)) {
            [[NSFileManager defaultManager] createDirectoryAtPath:DBDir withIntermediateDirectories :YES attributes :nil error :nil];
        }
        NSString* DBPath = [DBDir stringByAppendingPathComponent:DB_NAME];
        
        // 设置数据库路径,包含了数据库升级的逻辑
        __weak __typeof(self)weakSelf = self;
        [[YTBaseDBManager sharedInstance] startUpgradeDBWithPath:DBPath newDBVersion:DB_Version createTableBlock:^{
            __strong __typeof(weakSelf)strongSelf = weakSelf;
            [strongSelf initTables];
        }];
    }
    return self;
}

// 初始化数据表
- (void)initTables {
    // TODO: 在这里做初始化表的操作
    [VideoUploadModel createTableIfNotExists];
}

@end

Comment ( 0 )

Sign in to post a comment

Objective-C
1
https://git.oschina.net/dhar/YTBaseDBManager.git
git@git.oschina.net:dhar/YTBaseDBManager.git
dhar
YTBaseDBManager
YTBaseDBManager
master

Search

103111 552b83b3 1850385 103110 ed87a847 1850385