iOS中FMDB的使用

http://www.cnblogs.com/jerehedu/p/5054426.html?utm_source=tuicool&utm_medium=referral


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

  2 FMDB的下载地址https://github.com/ccgus/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);   
        }
    }];
复制代码



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值