FMResultSet的进行流程

// 得到已经传入的数据

//新创建的模型对象

    SSSGyoModel *gyoModelToSelect = [SSSGyoModel new];

//查找时需要的参数

    gyoModelToSelect.kokocd = testKokocd; //该赋值的testKokocd

    gyoModelToSelect.koshicd = testKoshicd;

    gyoModelToSelect.sagymd = testYmd;

    gyoModelToSelect.gdseqno = testGdseqno;

    gyoModelToSelect.kaishacd = testKaishacd;

    NSArray *gyosyaList = [gyoModelToSelect fetchWithparams:[gyoModelToSelect getRecordParams] error:&dbError];

    

其中:

- (NSDictionary *)getRecordParams {

    return @{

             @"kojicd":_kokocd,

             @"kokucd":_koshicd,

             @"sagyoymd":_sagymd,

             @"gdseqno":_gdseqno,

             @"kaishacd":_kaishacd,

             };

}


其中:

//调用了下面的方法

- (NSArray<SWKDataModel *> *)fetchWithparams:(NSDictionary *)params error:(NSError *__autoreleasing *)error

{

    return [self fetchWithparams:params orderParams:nil error:error];

}


//接着调用了下面的方法

- (NSArray<SWKDataModel *> *)fetchWithparams:(NSDictionary *)params orderParams:(NSArray<NSDictionary *> *)orderParams error:(NSError *__autoreleasing *)error {

    // 先获取表名

    NSString *tblName = [self getTableName];

    // 条件

    

    NSMutableString *sql = [NSMutableString stringWithFormat:@"SELECT * FROM %@", tblName];

    NSMutableString *where = [NSMutableString stringWithString:@""];

    NSMutableString *order = [NSMutableString stringWithString:@""];

    NSMutableArray *values = [NSMutableArray array];

//params是传入的参数

    [params enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {

        if ([where length] > 0) {

            [where appendFormat:@" AND %@ = ?", key];

        }

        else {

            [where appendFormat:@" WHERE %@ = ?", key];

        }

        [values addObject:obj];

    }];

    if ([where length] > 0){

        [sql appendString:where];

    }

    for (NSArray *orderArray in orderParams) {

        if ([order length] > 0) {

            [order appendFormat:@", %@ %@", orderArray[0], orderArray[1]];

        }

        else {

            [order appendFormat:@" order by %@ %@", orderArray[0], orderArray[1]];

        }

    }

    if ([order length] > 0){

        [sql appendString:order];

    }

    [sql appendString:@";"];

    

    // SQL

    FMDatabase *db = [SWKDataAccessManager openDatabase];

    NSArray *models = [SWKDataAccessManager executeQuery:sql values:values loadTarget:[self class] db:db error:error];

    [db close];

    return models;

}


其中:

+ (FMDatabase *)openDatabase{

    

    //open database with FMDB.

    FMDatabase *db = [self getDB];

    if ([db open])

    {

        return db;

    }

    

    return nil;

}


其中:

+ (FMDatabase *)getDB {

    static FMDatabase *sDb = nil;

    if (!sDb)

    {

  

        NSString *dbPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

      

        dbPath = [dbPath stringByAppendingPathComponent:@"ss_mock.db"];

  

        NSLog(@"DB File Location: %@", dbPath);

        

        //判断在Document下面有没有DB文件

        NSFileManager *fileManager = [NSFileManager defaultManager];

        if (![fileManager fileExistsAtPath:dbPath]) {

            //不存在

            //复制默认的DB文件(保存在本地,只是第一次)


            NSBundle *bundle = [NSBundle mainBundle];

            NSString *orgPath = [bundle bundlePath];

            //开始的文件的path

            orgPath = [orgPath stringByAppendingPathComponent:@"ss_mock.db"];

            

            // 默认的DB文件复制到Document的下面

            if (![fileManager copyItemAtPath:orgPath toPath:dbPath error:nil]) {

                //error

                NSLog(@"db file copy error. : %@ to %@.", orgPath, dbPath);

                return nil;

            }

        }

        

        //open database with FMDB. FMDB框架里面的方法。

        sDb = [FMDatabase databaseWithPath:dbPath];

    }

    

    return sDb;

}


其中:

+ (NSArray *)executeQuery:(NSString *)sql values:(NSArray *)values loadTarget:(Class)loadTarget db:(FMDatabase *)db error:(NSError *__autoreleasing *)error

{

    NSMutableArray *array = [NSMutableArray array];

    

    FMResultSet * ret = [db executeQuery:sql values:values error:error];

    if (ret)

    {

  

        while ([ret next]) {

      

            SWKDataModel *target = [[loadTarget alloc] init];

            [target configureValuesWithResultSet:ret];

            


            [array addObject:target];

        }

    }

    

    return array;

}

其中:

- (void)configureValuesWithResultSet:(FMResultSet *)resultSet

{

// 是根据_columnNameToIndexMap属性获取到列名称(columnName)的对应列号(columnIdx)。_columnNameToIndexMap是一个 // NSMutableDictionary对象。其中key表示的是指定结果集中对应列的名称,value表示的是指定结果集中对应的列号(columnIdx)。

    NSMutableDictionary *columnMap = [resultSet columnNameToIndexMap];

    

 //  和列名同名的属性,设置值


    [columnMap enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {

     // 列的名称不是空的

 // [self respondsToSelector:NSSelectorFromString(key)] : 在属性赋值时,做容错处理,防止因为后台数据导致的异常

        if ((![resultSet columnIsNull:key])

            && ([self respondsToSelector:NSSelectorFromString(key)]))

        {

//此处的val不是obj,是列的名称的值

            id val = [resultSet objectForColumnName:key];

            [self setValue:val forKey:key];

        }

    }];

}


//



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值