iOS中原生的SQLite API在使用时,非常的不方便。于是,就出现了系列将SQLite API进行封装的库。例如:FMDB、PlausibleDatabase等。

  FMDB的github地址:https://github.com/ccgus/fmdb

(一)、 什么是FMDB?

      1、FMDB是以iOS平台的SQLite数据库框架。

      2、FMDB以OC的方式封装了SQLite的C语言API。

      3、FMDB是一款简洁、易用的封装库,在使用的时候,依赖Libsqlite3.dylib依赖包。

(二)、FMDB的优点

      1、使用起来更加面向对象,省去了很多麻烦、多余的C语言的代码。

      2、对比苹果自带的Core Data框架,更加轻量级和灵活。

      3、提供了多线程安全的数据库操作方法,能有效的防止数据混乱。

      4、FMDB同时兼容ARC和非ARC工程中,会自动根据工程配置来调整相关的内存管理代码。

(四)、FMDB的三个主要使用的类

      1、FMDatabase :一个单一的SQLite数据库,用来执行SQL语句。

             一个FMDatabase对象就代表一个单独的SQLite数据库,用来执行SQL语句。

      2、FMResultSet :执行查询后的结果集

            这个和Android的Cursor类似。

       3、FMDatabaseQueue :用于在多线程中执行多个查询或更新,它是线程安全的。

(五)、FMDatabase对数据库的操作

        1、创表 :通过指定SQLite数据库文件路径来创建FMDatabase对象

     文件的路径有三种情况:

            具体文件路径 :如果不存在会自动创建

            空字符串        :会在临时目录创建一个空的数据库,会在FMDatabase连接关闭时,数据库文件也被删除。

            nil       :会创建一个内存中临时数据库,当FMDatabase连接关闭时,数据库也会被销毁。 

      2、更新 : 在FMDB中,除了查询以外的所有操作,都称为“更新

       create、drop、insert、update、delete等.

       使用executeUpdate:方法执行更新

      - (BOOL)executeUpdate:(NSString*)sql, ...

      - (BOOL)executeUpdateWithFormat:(NSString*)format,...

      - ( BOOL)executeUpdate:( NSString*)sql withArgumentsInArray:( NSArray*)arguments

    示例:[dbexecuteUpdate:@"UPDATE t_foo SET age = ? WHERE name = ?;",@20,@"Jack"]

     3、查询

        查询的方法:

     - (FMResultSet *)executeQuery:(NSString*)sql, ...

     - ( FMResultSet *)executeQueryWithFormat:( NSString*)format,...
     - ( FMResultSet *)executeQuery:( NSString *)sql withArgumentsInArray:( NSArray*)arguments

       示例:

         

    // 1.查询数据

    FMResultSet *rs = [self.dbexecuteQuery:@"select * from t_foo where age > ?;",@50];

    // 2.遍历结果集

    while (rs.next) {

        int ID = [rs intForColumn:@"id"];

        NSString *name = [rs stringForColumn:@"name"];

        int age = [rs intForColumn:@"age"];

        NSLog(@"%d %@ %d", ID, name, age);

    }

(六)、FMDatabaseQueue的使用

       FMDatabase这个类是线程不安全的,如果在多个线程中同时使用一个FMDatabase实例,会造成数据混乱等问题。

       为了保证线程的安全,FMDB提供方便快捷的FMDatabaseQueue类。

       FMDatabaseQueue后台会建立序列化的GCD队列,并执行你传给的GCD队列的块。这就意味着你是从多线程同时调用方法,GCD也会按照

       它接收块的顺序执行。

       FMDatabaseQueue的创建:

      插入数据:      

    [self.queueinDatabase:^(FMDatabase *db) {

        for (int i =0; i<40; i++) {

            NSString *name = [NSStringstringWithFormat:@"rose-%d",arc4random() %1000];

            NSNumber *age = @(arc4random() % 100 + 1);

            [db executeUpdate:@"insert into t_test (name, age) values (?, ?);", name, age];

        }

    }];

      插入数据(使用事务):

   [self.queueinTransaction:^(FMDatabase *db,BOOL*rollback) {

         [db executeUpdate:@"INSERTINTO t_test(name)VALUES (?)",@"Jack"];

         [db executeUpdate:@“INSERTINTO t_test(name)VALUES (?)",@"Rose"];

         [db executeUpdate:@"INSERTINTO  t_test(name)VALUES (?)",@"Jim"];

             //查询

       FMResultSet *rs = [db executeQuery:@"select* from t_test"];

       while ([rs next]) {

        // …

   }

       //事务回滚   

      *rollback = YES;

}];

      更新数据(使用事务):

  

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐