iOS | FMDB快速上手

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

首先简单介绍下

实现客户端数据库操作的第三方框架.
操作数据库的类 : 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);
    }];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,482评论 4 61
  • 缘来她在那阅读 1,382评论 0 0
  • 2017年10月26日我参加了某婚纱摄影的投票活动。在未来的3天,我就开始了短暂的拉票之旅,这几天,通过网络拉...
    爱萧阅读 4,101评论 0 1
  • 今天晨读分享的书是《意料之外》,分享了三个方面的内容。 1.理解意外 生活中总存在着大大小小的意外,能给我们带来惊...
    有个欧宝阅读 1,855评论 0 0
  • 当太阳洒下第一缕光亮的时候整座山都应当是春天的颜色所有的眼睛会在这一刻睁开唤醒一条熟睡的小河 每个人都有幸福的理由...
    紫章阅读 2,256评论 2 3

友情链接更多精彩内容