zoukankan      html  css  js  c++  java
  • FMDB使用

    一、什么是FMDB

      OS中原生的SQLite API在使用上大部分都是C语言代码,在使用时,非常不便,因此便出现了很多针对SQLite封装的第三方框架,其中FMDB就是其中一个优秀的框架,FMDB以OC的方式封装了SQLite的C语言API, 它的出现使操作SQLite变得更简洁易用,相比苹果自带的Core Data框架,FMDB显得更加轻量级,灵活。

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

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

    二、FMDB常用类

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

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

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

    三、操作数据库

    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/ 
    本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
     
  • 相关阅读:
    docker as engitor及云构建devops选型
    elmlang:一种编码和可视化调试支持内置的语言系统
    engitor:基于jupyter,一个一体化的语言,IDE及通用分布式架构环境
    【Heritrix基础教程之3】Heritrix的基本架构
    Eclipse 快捷键大全
    【Heritrix基础教程之2】Heritrix基本内容介绍
    【Heritrix基础教程之1】在Eclipse中配置Heritrix
    Berkeley DB基础教程
    【搜索引擎Jediael开发笔记】v0.1完整代码
    【搜索引擎Jediael开发笔记】V0.1完整代码
  • 原文地址:https://www.cnblogs.com/jerehedu/p/4476092.html
Copyright © 2011-2022 走看看