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

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对数据库的操作

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

fmdb最多几个主键 ios ios fmdb使用_事务回滚

     文件的路径有三种情况:

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

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

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

     更新 : 在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"]

查询

        查询的方法:

   

- (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);
     }

fmdb最多几个主键 ios ios fmdb使用_事务回滚_02

(六)、FMDatabaseQueue的使用

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

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

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

       它接收块的顺序执行。

       FMDatabaseQueue的创建:

fmdb最多几个主键 ios ios fmdb使用_多线程_03

      插入数据:      

self.queueinDatabase:^(FMDatabase
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) {
executeUpdate:@"INSERTINTO t_test(name)VALUES (?)",@"Jack"];
executeUpdate:@“INSERTINTO t_test(name)VALUES (?)",@"Rose"];
executeUpdate:@"INSERTINTO  t_test(name)VALUES (?)",@"Jim"];
//查询
FMResultSet *rs = [db  executeQuery:@"select* from t_test"];
while ([rs  next]) {
// …
   }
//事务回滚   
      *rollback =  YES;
}];
       更新数据(使用事务):


  

fmdb最多几个主键 ios ios fmdb使用_fmdb最多几个主键 ios_04