iOS中FMDB的使用

摘要:
FMResultSet:执行以查询FMDatabase结果集。“;BOOLflag=[dataBaseexecuteUpdate:更新,@”zhangsan“];如果{NSLog;}//5.查询数据FMDB的FMResultSet提供多种方法来获取不同类型的数据NSString*sql=@“select*fromt_user”;FMResultSet*result=[dataBaseexecuteQuery:sql];而{intids=[resultintForColumn:@“id”];NSString*name=[resultstringForColumn:=“name”];intids=[resultintForColumnIndex:0];NSString*name=[resultstringForColumnIndex:1];NSLog;}如果应用程序使用多线程操作数据库,则需要使用FMDatabaseQueue来确保线程安全。不允许在多个线程中使用一个FMDatabase对象来操作数据库,这将导致数据库数据混乱。为了多线程数据库操作的安全性,FMDB使用FMDatabaseQueue。使用FMDatabaseQueue很简单。首先,使用数据库文件地址来初始化FMDatabaseQueue,然后可以向inDatabase方法传递闭包。

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

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

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

iOS中FMDB的使用第1张

iOS中FMDB的使用第2张

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

免责声明:文章转载自《iOS中FMDB的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇maven 打包时自定义变量的使用sklearn 之 单类支持向量机(One-Class SVM)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ThinkPhp框架对“数据库”的基本操作

框架有时会用到数据库的内容,在"ThinkPhp框架知识"的那篇随笔中提到过,现在这篇随笔详细的描述下。 数据库的操作,无疑就是连接数据库,然后对数据库中的表进行各种查询,然后就是对数据的增删改的操作,一步步的讲述一下框架对数据库的操作 想要操作数据库,第一步必然是要:链接数据库 一、链接数据库 (1)找到模块文件夹中的Conf文件夹,然后进行编写con...

使用vs2010自带的数据库的方法

Microsoft SQL Server Database File(SqlClient)。选择数据库文件目录,或者创建数据库文件的目录---一般选择工程所在目录,然后给数据库一个名字.mdf。选择Use Windows Authentication。然后选择OK,YES。……这样创建数据库呢不是很好。关于“数据库版本为655 无法打开,此服务器支持612...

psql 命令行使用

如果觉得直接打开数据库修改繁琐,那么使用终端命令行是方便而又高大上的。下面来看看有哪些命令行:  说明:如果是正式的服务器则需要进行一个操作在执行下面的命令 ssh name @主机地址 -- name 是用户名 主机地址可以是ip地址或者域名 然后输入密码 登录成功后方可用下面的命令 (1)使用命令行连接数据库 psql -U postgres -h...

2015.7.30 第十五课 sql(新建数据库、创建表、注释、查询语句、新增、更新、删除、联合查询)

1、认识数据库并新建: 1)打开数据库,连接到服务器。 2)服务里类型不用管。 3)服务器名称:打个点“.”表示服务器在本地计算机,如果是托管在别人的服务器上,就输入服务器IP地址。 4)身份验证:如果是windows身份验证,就需要有管理员权限。一般托管在别人的服务器上,(包括正常情况下),都是用SQL身份验证,需要输入sa和密码(密码就是安装时让输入的...

微信小程序 云开发数据库查询为空的原因

1、权限设置。 2、数据类型不一致 这种场景不多见。一般是从一个表里取出一个数据,用它去查另外一个数据表。 eg. 我从A表里查出一个数据a,用a去匹配B表里_id查询最终需要的数据。 (顺便一提,提取某条记录的某个数据的代码:res.data[0].a) 但是A表的a是number类型,B表里的_id是string类型。所以表达式写的再正确,数据类型不...

mongodb的配置参数

Mongodb启动命令mongod参数说明mongod的主要参数有: 基本配置-------------------------------------------------------------------------------- --quiet # 安静输出 --port arg # 指定服务端口号,默认端口27017 --bind...