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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容