博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS开发中FMDB的使用
阅读量:6454 次
发布时间:2019-06-23

本文共 3409 字,大约阅读时间需要 11 分钟。

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

  2、FMDB的下载地址:

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

 

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

 

作者:杰瑞教育
出处:
 
版权声明:本文版权归
技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
技术咨询:
 
你可能感兴趣的文章
由中序遍历和后序遍历求前序遍历
查看>>
JQUERY Uploadify 3.1 C#使用案例
查看>>
coursera 北京大学 程序设计与算法 专项课程 完美覆盖
查看>>
firewall 端口转发
查看>>
wndows make images
查看>>
FS系统开发设计(思维导图)
查看>>
我学习参考的网址
查看>>
DEDE自带的采集功能,标题太短的解决方法
查看>>
easyui的combotree以及tree,c#后台异步加载的详细介绍
查看>>
1、串(字符串)以及串的模式匹配算法
查看>>
[Processing]点到线段的最小距离
查看>>
考研随笔2
查看>>
ubuntu Linux 操作系统安装与配置
查看>>
操作系统os常识
查看>>
乱码的情况
查看>>
虚拟机centos 同一个tomcat、不同端口访问不同的项目
查看>>
在不花一分钱的情况下,如何验证你的创业想法是否可行?《转》
查看>>
Linux/Android 性能优化工具 perf
查看>>
GitHub使用教程、注册与安装
查看>>
论以结果为导向
查看>>