VODBCache 2.0.0

VODBCache 2.0.0

测试已测试
语言 Obj-CObjective C
许可证 自定义
发布最后发布2016年6月

Valo Lee维护。



VODBCache 2.0.0

  • 作者
  • pozi119

VODBCache(FMDB的数据缓存)

       

  • 本项目包含了数据缓存(VODBCache), 网络请求缓存(VOURLCache).
  • VOURLCache 未经过严格测试,请谨慎使用,使用 CocoaPods 时不会导入 VOURLCache.
  • 以下仅针对 VODBCache 进行说明

特别说明(2.0.0)

  • 使用数据库加密功能,只能使用 SQLCipher,不能使用系统的 sqlite3,否则会出现加密后无法操作数据库的问题。
  • VODBCache 会自动导入 FMDB 和 SQLCipher,如果之前已经导入了 FMDB,必须将 pod 'FMDB' 删除。

功能说明(2.0.0)

  • 项目中必须包含 FMDB,主要用于缓存网络请求获取的 JSON 对象
  • 只缓存数字和字符串类型的数据
  • 支持数据的增删改查
  • 可自动添加新字段(不支持从旧字段更名)
  • 创建数据表时,会自动创建3个字段 vd_primaryKey(唯一性约束), vd_createTime(创建时间), 更新时间(vd_updateTime)
  • 使用 vd_classSpec 配置关键字,黑白名单,数据版本号等
  • 数据版本为 0,1,2...,当版本数字大于旧版时,将删除当前缓存表重新创建。当 primaryKey 或者修改某个关键属性名时使用,新增属性时可不使用。
  • 添加 FMDB/SQLCipher,支持对数据库文件加密
  • 添加 tablePrefix,用于按用户存储,数据过多时分表

安装

  • CocoaPods 导入(会自动导入 FMDB)
pod 'VODBCache','2.0.0'
  • 手动导入
    • 将 VODBCache 文件夹的所有源代码拖入您的项目中
    • 使用 Cocoapods 或手动导入 FMDB

使用

  • 在数据模型的.h和需要使用 VODBCache 源码的文件中包含头文件
#import "VDCache.h"

1.配置 .1) 可不配置 vd_myCls,使用 spec 的代码中会自动设置为当前类名 .2) 每个对象必须要有唯一性约束,所以必须配置 vd_classSpec 的 vd_primaryKey 或实现 - (NSString *)vd_generatePrimaryKey 两者之一

+ (VDClassSpec *)vd_classSpec{
    return [VDClassSpec vd_makeClassSpecWithBlock:^(VDClassSpec *spec) {
        spec.vd_primaryKey(@"citycode")     //主键名,将使用此属性的值作为唯一性约束
        .vd_cacheBlackList(@[@"WD",@"WS"]); //黑名单
    }];
}

- (NSString *)vd_generatePrimaryKey{        //配置唯一性约束的另一种方式
    return self.userId;
}

2.增删改查的使用请查看注释。sqlWhere 表示 SQL 语句的 WHERE(查询条件) 部分,sqlSort 表示 SQL 语句的 ORDER BY(排序) 部分,sqlRange 表示 SQL 语句的 LIMIT 部分

  • 新增单个对象
    BOOL ret = [weather vd_cacheObject];
  • 新增或更新单个对象
    BOOL ret = [weather vd_cacheOrUpdateObject];
  • 新增或更新多个对象
    BOOL ret = [VOWeather vd_cacheOrUpdateOObjects:array];
  • 查询对象
    self.weathers = [VOWeather vd_queryCachedObjectsWhere:nil sort:nil range:NSMakeRange(0, 100)];
  • 根据某种条件删除对象
    NSString *condition = [NSString stringWithFormat:@"\"pinyin\" = \"%@\"",city];
    BOOL ret = [VOWeather vd_deleteCachedObjectsWhere:condition];
  • 删除多个对象
        BOOL ret = [VOWeather vd_deleteCachedObjects:willDelArray];
  • 根据某种条件修改对象
    NSString *condition = [NSString stringWithFormat:@"\"pinyin\" = \"%@\"",city];
    NSString *lTmp = self.lTmpTextField.text;
    NSString *hTmp = self.hTmpTextField.text;
    NSString *tmp  = self.tmpTextField.text;
    NSMutableString *values = [NSMutableString string];
    if (lTmp && lTmp.length > 0) {
        [values appendFormat:@"\"l_tmp\" = \"%@\",",lTmp];
    }
    if (hTmp && hTmp.length > 0) {
        [values appendFormat:@"\"h_tmp\" = \"%@\",",hTmp];
    }
    if (tmp && tmp.length > 0) {
        [values appendFormat:@"\"temp\" = \"%@\",",tmp];
    }
    if (values.length < 2) {
        NSLog(@"No value to modify");
        return;
    }
    [values deleteCharactersInRange:NSMakeRange(values.length - 1, 1)];
     NSString *tableName = NSStringFromClass([VOWeather class]);
    if (VDCache.tablePrefix.length > 0 && ![tableName isEqualToString:NSStringFromClass([VDClassSpec class])]) {
        tableName = [VDCache.tablePrefix stringByAppendingString:tableName];
    }
    NSString *sql = [NSString stringWithFormat:@"UPDATE \"%@\" SET %@ WHERE %@", tableName, values, condition];
    BOOL ret = [VOWeather vd_excuteWithSQL:sql];

3.如果在运行时出现以下错误

 (19: UNIQUE constraint failed: weather.vd_primaryKey)

此错误说明唯一性冲突,通常可以忽略。

4.设置数据库文件加密密钥(2.0.0-beta11)

   [VDCache setEncryptKey:@"123456"];

5.可以使用 [VDCache setLogErrors:YES]; 开启或关闭数据库调试信息

备注

  • 版本 1.0 已经在公司的项目中投入使用,并未发现明显问题。
  • 版本 2.0 调整了架构和 CURD 方法,整合了数据库加密功能

欢迎大家提出 issue。