FMDB数据库总结

这是本人自己整理的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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值