基本思路是这样的:把数据存储的操作封装在一个工具类中,然后提供存储以及取出方法,在使用的时候进行调用即可
下面以微博为例子,进行简单的讲解:
- 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;
}
