iOS FMDB使用详解
简述
一个针对IOS的SQlite API封装的第三方库FMDB,FMDB对SDK中的API做了一层封装,使之使用OC来访问,使用方便而且更熟悉。pod FMDB
@FMDB主要涉及两个类,FMDatabase和FMResultSet 下载完FMDB源码后把文件拖到工程中
具体使用
赋上一系列基本操作,增删改查
#import "ZJIHomeDataBaseHandle.h"
@implementation ZJIHomeDataBaseHandle
static ZJIHomeDataBaseHandle *homeDataBaseHandle = nil;
+(ZJIHomeDataBaseHandle *)shareInstance{
@synchronized(self){
if(!homeDataBaseHandle) {
homeDataBaseHandle = [[ZJIHomeDataBaseHandle alloc]init];
[homeDataBaseHandle openDataBase];
[homeDataBaseHandle createTable];
}
}
return homeDataBaseHandle;
}
#pragma mark - 定义一个 FMDatabase 对象
static FMDatabase * database = nil;
#pragma mark - 获得沙盒文件下Documents路径
- (NSString *)getDocumentsPath{
NSString * documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
return documents;
}
#pragma mark - 打开数据库操作------ databaseWithPath open
- (void)openDataBase{
if (database) {
return;
}
NSString * dataBasePath = [[self getDocumentsPath] stringByAppendingPathComponent:@"latestNews.sqlite"];
NSLog(@"%@----dataBasePath----",dataBasePath);
database = [FMDatabase databaseWithPath:dataBasePath];
if (![database open]) {
NSLog(@"打开数据库失败");
}
// 为数据库设置缓存,提高查询效率
database.shouldCacheStatements = YES;
NSLog(@"打开数据库成功");
}
#pragma mark - 关闭数据库操作
- (void)closeDataBase{
if (![database close]) {
NSLog(@"关闭数据库失败");
return;
}
database = nil;
NSLog(@"关闭数据库成功");
}
#pragma mark - 管理创建表的操作
- (void)createTable{
[self openDataBase];
if(![database tableExists:@"t_latestNews"]){
[database executeUpdate:@"CREATE TABLE 't_latestNews' ('id' INTEGER PRIMARY KEY AUTOINCREMENT,'homeLatestNews' text)"];
NSLog(@"创建表成功");
}
[self closeDataBase];
}
-(NSString*)dictionaryToJson:(NSDictionary *)dic{
NSError *parseError = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError];
return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
#pragma mark - 增加数据操作----- executeUpdate
- (void)insertIntoDataBase:(NSDictionary *)homeDictionary{
NSString *homeJSON = [self dictionaryToJson:homeDictionary];
[self openDataBase];
[database executeUpdate:@" DELETE FROM 't_latestNews'"];
[database executeUpdate:@" INSERT INTO 't_latestNews' (homeLatestNews) VALUES (?)",homeJSON];
[self closeDataBase];
}
#pragma mark - 删除数据操作----- executeUpdate
- (void)deleteDataFromDataBase:(NSDictionary *)homeDictionary{
[self openDataBase];
[database executeUpdate:@" DELETE FROM 't_latestNews'"];
[self closeDataBase];
}
#pragma mark - 更新数据操作----- executeUpdate
- (void)updateFromDataBase:(NSDictionary *)homeDictionary{
NSString *homeJSON = [self dictionaryToJson:homeDictionary];
[self openDataBase];
[database executeUpdate:@" UPDATE 't_latestNews' (homeLatestNews) VALUES (?)",homeJSON];
[self closeDataBase];
}
#pragma mark - 查询数据操作(与其他的都不一样,查询是调用executeQuery,切记切记!!!!!!)
- (NSDictionary *)selectAllDataFromDataBase{
[self openDataBase];
FMResultSet * resultSet = [database executeQuery:@" SELECT * FROM 't_latestNews'"];
NSMutableDictionary *dic = [[NSMutableDictionary alloc]init];
while ([resultSet next]) {
NSString *jsonString = [resultSet stringForColumn:@"homeLatestNews"];
dic = [self dictionaryWithJsonString:jsonString];
}
NSLog(@"%@---dictionaryWithJsonString--", dic);
[self closeDataBase];
return dic;
}
-(NSMutableDictionary *)dictionaryWithJsonString:(NSString *)jsonString {
if (jsonString == nil) {
return nil;
}
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *err;
NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:&err];
if(err) {
NSLog(@"json解析失败:%@",err);
return nil;
}
return dic;
}
@end
查看.sqlite文件
先打印文件路径,然后在文件夹中查找到此文件(直接用缩写的文件名xxxx.sqlite是找不到的哦),然后在桌面新建文件夹将sqlite文件复制进去(千万不要拖进去,会在下次运行时重建一个)
最重要下载Datum软件,可即时查看文件缓存的数据