FMDB数据库总结

来源:互联网 发布:短网址源码 编辑:程序博客网 时间:2024/05/31 18:50

这是本人自己整理的FMDB,如有问题请见谅并指出,谢谢!。


要用fmdb缓存,首先要熟练使用SQLite指令,可以参考我的博客文@http://blog.csdn.net/icandyss/article/details/50670078
下面是我写的一个小Demo:
FMDB数据库最常用的就是增删改查,下面的demo主要是缓存了从网上请求下来的一些图片和其对应的标题。可以满足在断网或再次运行应用的情况下界面有数据。


  - (void)viewDidLoad {          //应用刚运行的时候,首先要判断是否有已经有缓存了,如果有就用缓存里的数据,没有的话再重新请求。         //先获取保存的文件的位置        NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];    NSString *fileName = [doc stringByAppendingPathComponent:@"fmdb.sqlite"];    //判断是否存在这个文件    BOOL isExit = [[NSFileManager defaultManager]fileExistsAtPath:fileName];    if (!isExit) {        //不存在的话,重新从网上请求数据        [self requestDatas];    }else    {        //存在的话,先创建数据库        [self creatFmdb];        //获取数据库里的信息        [self readDataFromFmdb];    }  }//网络请求- (void)requestDatas{    NSString *url = @"****************************************************";    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];    [manager GET:url parameters:nil success:^(AFHTTPRequestOperation * _Nonnull operation, id  _Nonnull responseObject) {        //NSLog(@"%@",responseObject);        NSArray *infoArr = responseObject[@"data"];        for (NSDictionary *dict in infoArr) {        //取出请求下来的数据保存到可变数组_datas里            [_datas addObject:dict];        }        //创建数据库        [self creatFmdb];        //插入数据        [self insertDataToFmdb:_datas];        //刷新UI界面        [_tableview reloadData];    } failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) {        NSLog(@"%@",error);    }];}//创建数据库缓存- (void)creatFmdb{      //获取数据库文件的路径    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];  NSString * fileName = [doc stringByAppendingPathComponent:@"fmdb.sqlite"];    //创建数据库    FMDatabase *db = [FMDatabase databaseWithPath:fileName];    //打开数据库    [db open];    if ([db open]) {        //创表        BOOL table = [db executeUpdate:@"CREATE TABLE IF NOT EXISTS sstable (id integer PRIMARY KEY ,image text NOT NULL,name text NOT NULL ) ;"];        if (table) {            NSLog(@"创表成功");        }else        {            NSLog(@"创表失败");        }    }    _db = db;    //_db为创建的FMDatabase类型的全局变量。}//插入数据- (void)insertDataToFmdb:(NSArray *)datas{    //首先打开数据库    [self.db open];    //插入数据    if ([self.db open]) {        for (int i = 0; i < datas.count; i++) {            [self.db executeUpdate:@"INSERT INTO sstable (image,name) VALUES (?, ?);",datas[i][@"logo"],datas[i][@"name"]];        }    }    [self.db close];}//读取数据- (void)readDataFromFmdb{    //获取数据库文件的路径    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];    NSLog(@"doc:----%@",doc);    _fileName = [doc stringByAppendingPathComponent:@"fmdb.sqlite"];    //获取数据库    FMDatabase *db = [FMDatabase databaseWithPath:_fileName];    //首先打开数据库    [db open];    if ([db open]) {               //读取数据        FMResultSet *result = [self.db executeQuery:@"SELECT * FROM sstable"];        while ([result next]) {            NSMutableDictionary *dict = [[NSMutableDictionary alloc]initWithObjectsAndKeys:[result stringForColumn:@"image"],@"logo",[result stringForColumn:@"name"],@"name",nil];            [_datas addObject:dict];        }    }    [db close];}

到此已经可以完成数据缓存了,除了上述把数据库、网络请求和界面搭建写在一个控制器里的方法,还可以把数据库操作单独拿出来写一个单例,这样子使用起来会更简单方便一些!

0 0
原创粉丝点击