Skip to content

FFDB基本使用

Fidetro edited this page Oct 16, 2017 · 5 revisions

因为FFDB本身就是设计成对象关系型数据库,下面的内容都是基于FFStore的类写的参考代码

@interface FFStore : NSObject
/** 店铺名字 **/
@property(nonatomic,copy) NSString *name;
/** 店员总数 **/
@property(nonatomic,assign) NSInteger memberCount;
/** 店铺说明 **/
@property(nonatomic,copy) NSString *desc;
/** 店铺地址 **/
@property(nonatomic,copy) NSString *address;
@end

  1. 此时店铺表里没有任何商店,我们去给他插入几条数据
FFStore *aStore = [[FFStore alloc]init];
aStore.name = @"商店A";
FFStore *bStore = [[FFStore alloc]init];
FFStore *cStore = [[FFStore alloc]init];
[aStore insertObject];
[bStore insertObject];
[cStore insertObject];

在调用insertObject的方法的时候,会将FFStore所有属性都插入到表中,属性值为nil的会被转成空字符串@"",避免使用者需要处理null值的情况


  1. 我们在之前插入了二条没有名字的店铺数据,这时候如果我们要删除,需要先查出这部分数据,再调用deleteObject方法
NSArray <FFStore *>* storeArray = [FFStore selectFromClassPredicateWithFormat:@"where name = ''"];
for (FFStore *store in storeArray) {
     [store deleteObject];
}

或者使用FFDBManager里的+ (BOOL)deleteFromClass:(Class)dbClass SQLStatementWithFormat:(NSString *)format;

[FFDBManager deleteFromClass:[FFStore class] SQLStatementWithFormat:@"where name = ''"]

  1. 之前插入的商店A的店铺别的信息都没有填,这时候要更新的信息,需要先查出这部分数据,再调用updateObject方法
NSArray <FFStore *>* storeArray = [FFStore selectFromClassPredicateWithFormat:@"where name = ''"];
for (FFStore *store in storeArray) {
      store.memberCount = 1;
      store.desc = @"测试用的";
      store.address = @"广东";
     [store updateObject];
}

如果这次不需要更新desc字段,可以用- (BOOL)updateObjectSetColumns:(NSArray *)columns;需要传入你需要更新的字段名字

[store updateObjectSetColumns:@[@"memberCount",@"address"]];
[FFStore selectFromClassAllObject];//返回表中所有的对象
[FFStore selectFromClassPredicateWithFormat:@""];//条件查询

如果只需要查有多少行数据,可以使用FFDBManager中的+ (long long int)selectCountfromClasses:(NSArray <Class>*)dbClasses SQLStatementWithFormat:(NSString *)format;

[FFDBManager selectCountfromClasses:@[[FFStore class]] SQLStatementWithFormat:@""];//条件传nil或者空默认返回所有
Clone this wiki locally