zoukankan      html  css  js  c++  java
  • iOS | FMDB快速上手

    任何的开发都或多或少的接触到数据库,而在IOS中一般使用的是SQLite数据库,这是一个轻量功能较为不错的数据库.而现在用到比较多的第三方数据库操作框架就是FMDB.废话不多说,相信查找到这篇文章的都是已经上手的IOS开发者,直接上一些相关使用.

    提供git地址点击这里.

    首先简单介绍下

    实现客户端数据库操作的第三方框架.
    操作数据库的类 : FMDatabase.h
    队列调度数据库执行的类 : FMDatabaseQueue.h
    查询数据的类 : FMResultSet.h

    注意

    第三方的官方文档是这么说的:

    FMDatabaseQueue - If you're wanting to perform queries and updates on multiple threads, you'll want to use this class. It's described in the "Thread Safety" section below.

    翻译:如果你像去实现查找和更新在多线程上,你就是用这个类,这个是建立在线程安全之上的.
    做法:一般自行封装成一个工具类,设计成单例.
    目的:全局只有一个串行队列,这样操作数据库更加安全.

    先创建.h文件
    @interface FMDatabaseQueueManager : FMDatabaseQueue
    //提供单例入口
    + (instancetype)sharedManager;
    @end
    
    在.m文件中实现方法,创建一个数据库
    +(instancetype)sharedManager{
        static FMDatabaseQueueManager *instance;
    
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            // 1.获取数据库路径,将要把数据库存到这个路径中.
            NSString *SQLPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"my.db"];
            // 2. 创建管理数据库对象
            instance = [FMDatabaseQueueManager databaseQueueWithPath:SQLPath];
        });
    
        return instance;
    }
    
    新建表
      [[FMDatabaseQueueManager sharedManager] inDatabase:^(FMDatabase *db) {
                BOOL isCreate = [db executeUpdate:@"create table if not exists t_person(id integer primary key,name text not null,age integer);"];
    
    使用事务插入数据
    // 1.定义SQL语句
        NSString *insertSQL = @"insert into t_person(name,age) values(?,?);";
    
        // 2.队列调度数据库,使用事务插入数据,性能比原生SQLite3要好
        [[FMDatabaseQueueManager sharedManager] inTransaction:^(FMDatabase *db, BOOL *rollback) {
    
            // 3.循环新增大批量的数据
            for (NSInteger i = 0; i < 1000; i++) {
    
                // 4.执行SQL
                BOOL isOK = [db executeUpdate:insertSQL,@"张三",@(100)];
    
                // 出错就回滚
                if (!isOK) {
                    // 回滚快照
                    *rollback = YES;
                    // 非常重要
                    break;
                }
            }
        }];
    
    查询数据
    // 1.定义SQL语句
        NSString *updateSQL = @"select name,age from t_person;";
    
        // 2.队列调度数据库
        [[FMDatabaseQueueManager sharedManager] inDatabase:^(FMDatabase *db) {
    
            // 3.执行SQL
            FMResultSet *resultSet = [db executeQuery:updateSQL];
            // 4.逐条取记录
            while ([resultSet next]) {
    
                NSString *name = [resultSet stringForColumn:@"name"];
                int age = [resultSet intForColumn:@"age"];
    
                NSLog(@"%@ -- %d",name,age);
            }
        }];
    
    删除数据
    // 1.定义SQL语句
        NSString *updateSQL = @"delete from t_person where id = ?;";
    
        // 2.队列调度数据库
        [[FMDatabaseQueueManager sharedManager]  inDatabase:^(FMDatabase *db) {
    
            // 3.执行SQL
            BOOL isOK = [db executeUpdate:updateSQL,@(6)];
            if (isOK) {
                NSLog(@"删除数据成功");
            } else {
                NSLog(@"删除数据失败");
            }
        }];
    
    修改数据
    // 1.定义SQL语句
        NSString *updateSQL = @"update t_person set name = ?,age = ? where id = ?;";
    
        // 2.队列调度数据库
        [[FMDatabaseQueueManager sharedManager]  inDatabase:^(FMDatabase *db) {
    
            // 3.执行SQL
            BOOL isOK = [db executeUpdate:updateSQL,@"王五",@(19),@(3)];
            if (isOK) {
                NSLog(@"更新数据成功");
            } else {
                NSLog(@"更新数据失败");
            }
    
            NSLog(@"影响行数 %d", db.changes);
        }];
    
  • 相关阅读:
    预备作业2
    预备作业
    虚拟机安装&Linux初探
    20155330预备作业2:做中学——实践中思考
    预备作业:你期望的师生关系是什么?
    2017-2018-1 学号20155329 《信息安全系统设计基础》第5周学习总结
    2017-2018-1 学号20155329_5332_5302《信息安全系统设计基础》实验一 开发环境的熟悉
    再装虚拟机及git
    2017-2018-1 学号20155329 《信息安全系统设计基础》第4周学习总结
    2017-2018-1 学号20155329 《信息安全系统设计基础》第4周学习总结
  • 原文地址:https://www.cnblogs.com/JanChuJun/p/10102268.html
Copyright © 2011-2022 走看看