Latest 2.0.0-beta9
Homepage https://github.com/pozi119/VODBCacheDemo
License GPL V2.0
Platforms ios 7.0
Dependencies FMDB/SQLCipher
Authors

VODBCache(FMDB的数据缓存)

License Apache 
CocoaPods 
CocoaPods 
Support 
Build Status

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

特别说明(2.0.0-beta9)

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

功能说明(2.0.0-beta9):

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

安装

  • Cocoapods导入(会自动导入FMDB):
    pod 'VODBCache','2.0.0-beta9'
  • 手动导入
    • 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 *sql = [NSString stringWithFormat:@"UPDATE "%@" SET %@ WHERE %@",
                   NSStringFromClass([VOWeather class]), values, condition];
      BOOL ret = [VOWeather vd_excuteWithSQL:sql];

      3.如运行时候,出现如下错误:

      (19: UNIQUE constraint failed: weather.vd_primaryKey)

      此错误说明唯一性冲突,一般可忽略.

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

   [VDCache setEncryptKey:@"123456"];

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

备注

  • 版本1.0 已经使用在公司的项目中,暂未发现明显问题.
  • 版本2.0 正在修改,目前为测试版本2.0.0-beta9, 整合了数据库加密功能

欢迎大家多提issue.

Latest podspec

{
    "name": "VODBCache",
    "version": "2.0.0-beta9",
    "summary": "Cache Object with sqlite3",
    "description": "** Cache Object with sqlite3 **nNeed FMDB, MJExtension",
    "homepage": "https://github.com/pozi119/VODBCacheDemo",
    "license": "GPL V2.0",
    "authors": {
        "pozi119": "[email protected]"
    },
    "platforms": {
        "ios": "7.0"
    },
    "source": {
        "git": "https://github.com/pozi119/VODBCacheDemo.git",
        "tag": "2.0.0-beta9"
    },
    "source_files": [
        "VODBCache",
        "VODBCache/*.{h,m}"
    ],
    "dependencies": {
        "FMDB/SQLCipher": []
    },
    "xcconfig": {
        "OTHER_CFLAGS": "$(inherited) -DSQLITE_HAS_CODEC -DHAVE_USLEEP=1"
    },
    "subspecs": [
        {
            "name": "VOURLCache",
            "source_files": [
                "VOURLCache",
                "VOURLCache/*.{h,m}"
            ],
            "public_header_files": "VOURLCache/*.h",
            "dependencies": {
                "AFNetworking": []
            }
        }
    ]
}

Pin It on Pinterest

Share This