zoukankan      html  css  js  c++  java
  • iOS中FMDB的使用

      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);   
            }
        }];
    作者:杰瑞教育
    出处:http://www.cnblogs.com/jerehedu/ 
    版权声明:本文版权归杰瑞教育技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    技术咨询:JRedu技术交流
     
  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 数的统计
    Java实现 蓝桥杯VIP 算法训练 和为T
    Java实现 蓝桥杯VIP 算法训练 友好数
    Java实现 蓝桥杯VIP 算法训练 连续正整数的和
    Java实现 蓝桥杯VIP 算法训练 寂寞的数
    Java实现 蓝桥杯VIP 算法训练 学做菜
    Java实现 蓝桥杯VIP 算法训练 暗恋
    Java实现 蓝桥杯VIP 算法训练 暗恋
    测试鼠标是否在窗口内,以及测试鼠标是否在窗口停留
    RichEdit 各个版本介绍
  • 原文地址:https://www.cnblogs.com/jerehedu/p/5054426.html
Copyright © 2011-2022 走看看