FMDBTool 1.1.1

FMDBTool 1.1.1

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布上次发布2016 年 7 月

Donghai Cheng 维护。



FMDBTool 1.1.1

  • 作者
  • Donghai Cheng

这是一个fmdb工具库,用来简化fmdb操作:

  • TYFMDBTool.h 引用两个头文件,使用时引用它就行;
  • TYDatabaseQueueFactory 工厂模式创建FMDatabaseQueue对象;
  • TYDatabaseAccessTemplate 模板模式简化fmdb操作,这里面有三种常见的模版:数据更新模版,数据查询模版,批量操作模版;
  • TYCommonDatabaseAccess 访问fmdb类,里面包含一个TYDatabaseAccessTemplate属性,使用时继承或者组合它就行。
  • TYDatabaseAccess 此类继承自TYCommonDatabaseAccess,包含一个单例的FMDatabase对象,使用时继承或者组合它就行。
  • NSObject+TYFMResultSet 将查询结果转换成自定义的object数组。
  • TYMappingObject 建立表列名和对象属性之间的映射关系,以及进行数据转换。

安装方法

pod 'FMDBTool'

下面来看看怎么使用:

一开始需要在TYCommonDatabaseAccess子类的初始化方法里创建fmdb队列对象,一般只需要创建一次,所以用单例模式,或者继承TYDatabaseAccess就不需要另外创建databaseQueue。

      self.databaseQueue = [TYDatebaseQueueFactory sharedDatabaseQueueWithPath:DocumentsDirectory withDatabaseName:BOOK_DB_NAME];

查询操作

第一种方式,传入sql,需要自己手动转换FMResultSet

    NSString *sqlString = [NSString stringWithFormat:@"select * from %@ order by updateTime",@"mytablename"];
    NSArray *bookArray = [self executeQueryWithSql:sqlString inDatabaseQueue:self.databaseQueue itemConvertBlock:^id(FMResultSet *rs) {
        TYBookShelfInfo *contentInfo = [[self class] convertResultSetToBookShelfInfo:rs];
        return contentInfo;
    }];

第二种方式,在block里手动执行查询并手动转换FMResultSet

  NSArray *resultArr = [self executeQueryWithUsingBlock:^FMResultSet *(FMDatabase *db){
        return [db executeQuery:sql];
    } inDatabaseQueue:self.databaseQueue itemConvertBlock:^id(FMResultSet *rs) {
        NSInteger val = [rs intForColumn:@"dfs"];
        return @(val);
    }];

第三种方式自动转换查询结果为自定义对象数组,需要在block里设置映射关系,如果不设置则根据列名和对象属性名相同来进行默认映射。

[self executeQueryWithSql:sql inDatabaseQueue:self.databaseQueue itemClass:[CellModel class] mappingBlock:^void(TYMappingObject *mappingObject) {
        [mappingObject setColumnName:@"t_id" mappingToPorpertyName:@"tid"];
        [mappingObject setColumnName:@"t_title" mappingToPorpertyName:@"title"];
        [mappingObject setColumnName:@"t_count" mappingToPorpertyName:@"count"];
        [mappingObject setColumnName:@"t_time" mappingToPorpertyName:@"curTime" valueBlock:^id(NSString *propertyName, id value) {
            NSTimeInterval cur = 0;
            if (value && [value respondsToSelector:@selector(doubleValue)]) {
                cur = [value doubleValue];
            }
            if (cur > 0) {
                return [NSDate dateWithTimeIntervalSince1970:cur];
            }
            return nil;
        }];
    }];

更新操作;传入更新sql、可以删除表列、更新表列、新增表列、删除行、更新行、插入行。

[self executeUpdateWithSql:sqlstr inDatabaseQueue:self.databaseQueue];

或者通过block执行更新操作

[self executeUpdateUsingBlock:^BOOL(FMDatabase*db)){
            return [db executeUpdate:sql];
        } inDatabaseQueue:self.databaseQueue];

批量操作;比如批量更新数据(需要开启事务)。

NSString *updateSql = [NSString stringWithFormat:@"UPDATE %@ SET %@ = ? WHERE %@ = ?", BOOK_TABLE_4_0, BOOK_SHELF_INDEX,@"contentId"];
 [self executeTransactionInDatabaseQueue:self.databaseQueue withExecuteBlock:^(FMDatabase *db){
        for (int i = 0; i < bookShelfInfos.count; i++) {
            TYBookShelfInfo*bookshelfInfo = [bookShelfInfos objectAtIndex:i];

            BOOL b = [db executeUpdate:updateSql,@(bookshelfInfo.bookshelfIndex), bookshelfInfo.contentID];
            PLog(b?@"更新顺序号成功:%@":@"更新顺序号失败:%@",updateSql);
        }

    }];

许可证

FMDBTool使用 MIT 许可证,详情见 LICENSE 文件。