sql之FMDB进行数据存储思路(微博为例)

基本思路是这样的:把数据存储的操作封装在一个工具类中,然后提供存储以及取出方法,在使用的时候进行调用即可
下面以微博为例子,进行简单的讲解:

  • 1,在工具类的+ (void)initialize; 方法中进行数据库的初始化并打开以及创建表等
static FMDatabase *_db;

+ (void)initialize{
    //1, open FMDSB database
    _db = [FMDatabase databaseWithPath:[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"statuses.sqlite"]];
    [_db open];
    
    //2,create table, blob代表二进制数据,即NSData
    [_db executeUpdate:@"create table if not exists t_statuses (id integer PRIMARY KEY, status blob, idstr text)"];
}
  • 2,提供一个数据存储方法,需要在.h文件中声明暴漏给外部调用
  • 即你给我一组数组数据, 我转换成data后直接存储到相应的表中
+ (void)saveStatuses:(NSArray *)statuses{
    for (NSDictionary *status in statuses) {
        NSData *statusData = [NSKeyedArchiver archivedDataWithRootObject:status];
        [_db executeUpdateWithFormat:@"insert into t_statuses (status, idstr) values (%@, %@);", statusData, status[@"idstr"]];
    }
}

  • 3, 提供一个数组读取方法,需要在.h文件中声明暴漏给外部调用
  • 本案例只提供一个最简单的数据存储方法,在微博实际的数据存储方法中,有可能需要根据传入的idstr进行不同的读取操作。我这里只是默认的按idstr顺序读取最新的10条数据进来
+ (NSArray *)statusesWithParams:(NSDictionary *)param{//有可能需要根据idstr进行不同的读取,我这里就执行一种操作进行举例
    FMResultSet *result = [_db executeQuery:@"select * from t_statuses order by idstr desc limit 10"];
    NSMutableArray *statusArray = [NSMutableArray array];
    while (result.next) {
        //再把data转回字典
        NSData *statusData = [result objectForColumnName:@"status"];
        NSDictionary *status = [NSKeyedUnarchiver unarchiveObjectWithData:statusData];
        
        [statusArray addObject:status];
    }
    return statusArray;
}

你可能感兴趣的:(sql之FMDB进行数据存储思路(微博为例))