Stack Overflow上的一种数据存储法则:
- 若数据完全匹配内存且相对非结构化,则使用plist
- 若数据完全匹配内存且具有树状结构,则使用XML
- 若数据与内存不匹配且具有图形结构,同时应用不需要额外的查询能力,则使用Core Data
- 如果数据与内存不匹配且具有复杂结构,或应用需要关系数据库提供的强查询能力,则使用sqlite
- 如果数据必须保密(例如密码),则使用keychain。
下面列了一些数据存储方面的库
- FMDB
FMDB以OC的方式封装了SQLite的C语言API
ccgus/fmdb:fmdb - 围绕SQLite建立的Cocoa / Objective-C的wrapper
如果你在项目中使用SQLite,此wrapper库会使你的工作变简单。
- SSFKeychain
soffes/sskeychain:sskeychain - 简单的Objective-C wrapper,Mac和iOS上的keychain可以使用
要在应用中存储敏感数据,你必须时刻使用keychain。这个库可以简化使用keychain数据存储的过程。
- Magical Record
Core data非常难于管理。而这个库可以让你舒爽地管理Core Data。
一.coredata
新建项目可勾选coredata,会自动生成XX.xcdatamodeldeld.可以在这里添加属性和表之间的关系,生成属性文件的时候会自动写好属性。
也可以在没有勾选的情况下新建生成。
增
1.创建上下文对象:
NSManagedObjectContext *managedObjectContext = ManagedObjectContext;
2.获得实体
Person *person = [NSEntityDescription insertNewObjectForEntityForName:[Person entityName] inManagedObjectContext:managedObjectContext];
3.实体对象赋值
person.time = @"2016年六月二十三";
4.存储
NSError *error = nil; NSLog(@"%@",[managedObjectContext save:&error]?@"数据存储成功":error.localizedDescription);
删
[managedObjectContext deleteObject:person]; [managedObjectContext save:&error];
查,改
1.查询要修改的文件、对象、对象属性
NSFetchRequest *requset = [NSFetchRequest fetchRequestWithEntityName:[Person entityName]]; NSArray *datas = [managedObjectContext executeFetchRequest:requset error:nil]; request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"time" ascending:NO]];//排序:
2.更改值:
for (Person *person in datas) { if ([person isEqual:self.person]) { person.time =@"6:20"; } }
3.存储
[managedObjectContext save:nil];
-
配置查询请求,条件查询= 关系运算符 Contanins
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"time > %d",2];
request.predicate = predicate;
二.FMDB
查询出来结果是以字典的方式,传值是传字典数据更加方便
- 增
NSString *updateSql = [NSString stringWithFormat:@"UPDATE %@ SET %@ = '%@' , %@ = '%@' , %@ = '%@' WHERE %@ = %@", @"user", @"state", state ,@"time", time,@"thing",thing,@"id",idStr];
[db executeUpdate:updateSql];
删
BOOL isdelete= [db executeUpdate:@"delete from user where id = ?",idStr];
查
改
三.realm
- 增
删
查
改
/*
// 查询指定的 Realm 数据库
RLMRealm *petsRealm = [RLMRealm realmWithPath:@”pets.realm”]; // 获得一个指定的 Realm 数据库
RLMResults *otherDogs = [Dog allObjectsInRealm:petsRealm]; // 从该 Realm 数据库中,检索所有狗狗条件查询: 1 断言查询: RLMResults *tanDogs = [Dog objectsWhere:@"color = '棕黄色' AND name BEGINSWITH '大'"]; 2.使用 NSPredicate 查询 NSPredicate *pred = [NSPredicate predicateWithFormat:@"color = %@ AND name BEGINSWITH %@", @"棕黄色", @"大"]; RLMResults *tanDogs = [Dog objectsWithPredicate:pred]; 3..链式查询 RLMResults *tanDogs = [Dog objectsWhere:@"color = '棕黄色'"]; RLMResults *tanDogsWithBNames = [tanDogs objectsWhere:@"name BEGINSWITH '大'"]; */