转载

iOS开发中FMDB的使用

1、什在日常的开发中,我们需要用到离线缓存将数据信息存入数据库,在没有网络的时候进行加载,而我们IOS用的就是sqlite3数据库,用原生的sql我们也能实现,但是书写起来比较麻烦,尤其是其它语言转过来的程序员会感觉吃力,下面我们介绍一款比较优秀还简单的第三方FMDB

2、FMDB的下载地址: https://github.com/ccgus/fmdb

3、在FMDB下载文件后,工程中必须导入如下文件,并使用 libsqlite3.dylib 依赖包

iOS开发中FMDB的使用

iOS开发中FMDB的使用

4 FMDB常用类

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

FMResultSet :执行查询一个FMDatabase结果集。

FMDatabaseQueue :在多个线程来执行查询和更新时会使用这个类

5操作数据库

1 创建并且打开数据库

    // 1 获取数据库对象     NSString *path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];     path=[path stringByAppendingPathComponent:@"test.sqlite"];           dataBase=[FMDatabase databaseWithPath:path];     // 2 打开数据库,如果不存在则创建并且打开     BOOL open=[dataBase open];     if(open){         NSLog(@"数据库打开成功"); }   //3 创建表     NSString * create1=@"create table if not exists t_user(id integer autoincrement primary key,name varchar)";    BOOL c1= [dataBase executeUpdate:create1];     if(c1){         NSLog(@"创建表成功");     }   //4 插入数据     NSString * insertSql=@"insert into t_user(id,name) values(?,?)";      //    插入语句1     bool inflag1=[dataBase executeUpdate:insertSql,@(2),@"admin"];      //    插入语句2     bool inflag2=[dataBase executeUpdate:insertSql withArgumentsInArray:@[@"admin",@(5)]];      //    插入语句3     bool inflag3=[dataBase executeUpdateWithFormat:@"insert into t_user(id,name) values(%@,%d)",@"admin",6];    //    删除语句     NSString * delete=@"delete from t_user";     BOOL dflag= [dataBase executeUpdate:delete];     if(dflag){         NSLog(@"删除成功");     }    //    修改语句     NSString *update=@" update t_user set name=? ";     BOOL flag=  [dataBase executeUpdate:update,@"zhangsan"];     if(flag){         NSLog(@"修改成功"); } //    5查询数据FMDB的FMResultSet提供了多个方法来获取不同类型的数据     NSString * sql=@" select * from t_user "; FMResultSet *result=[dataBase executeQuery:sql]; while(result.next){ int ids=[result intForColumn:@"id"]; NSString * name=[result stringForColumn:@"name"]; int ids=[result intForColumnIndex:0]; NSString * name=[result stringForColumnIndex:1]; NSLog(@"%@,%d",name,ids);          } 

如果应用中使用了多线程操作数据库,那么就需要使用FMDatabaseQueue来保证线程安全了。 应用中不可在多个线程中共同使用一个FMDatabase对象操作数据库,这样会引起数据库数据混乱。 为了多线程操作数据库安全,FMDB使用了FMDatabaseQueue,使用FMDatabaseQueue很简单,首先用一个数据库文件地址来初使化FMDatabaseQueue,然后就可以将一个闭包(block)传入inDatabase方法中。 在闭包中操作数据库,而不直接参与FMDatabase的管理

 //2多线程操作       NSString *path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];     path=[path stringByAppendingPathComponent:@"test.sqlite"];      FMDatabaseQueue * queue=[FMDatabaseQueue databaseQueueWithPath:path];     [queue inDatabase:^(FMDatabase *db) {         NSString * create=@"create table if not exists t_book(id integer,name varchar)";         BOOL c1= [db executeUpdate:create];         if(c1){             NSLog(@"成功");         }      }];          [queue inDatabase:^(FMDatabase *db) {             NSString * insertSql=@"insert into t_book(id,name) values(?,?)";                    //插入语句1             bool inflag=[db executeUpdate:insertSql,@(2),@"admin"];            if(inflag){                NSLog(@"插入成功");            }      }];               [queue inDatabase:^(FMDatabase *db) {                 FMResultSet * data=[db executeQuery:@" select * from t_book "];                  while (data.next) {                          int ids=[data intForColumn:@"id"];             NSString *name=[data stringForColumn:@"name"];             NSLog(@"%@",name);             NSLog(@"%i",ids);            }     }]; 

作者:杰瑞教育

出处: http://www.cnblogs.com/jerehedu/

版权声明:本文版权归 杰瑞教育

技有限公司 和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

技术咨询: iOS开发中FMDB的使用

正文到此结束
Loading...