//打开数据库 如果没有就创建
    NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]stringByAppendingPathComponent:@"data.sqlite"];
    //创建数据库的队列
    FMDatabaseQueue *dataBaseQ = [FMDatabaseQueue databaseQueueWithPath:path];
    self.dataBaseQ = dataBaseQ;
    [dataBaseQ inDatabase:^(FMDatabase *db) {
       
        BOOL success = [db open];
        if (success) {
            NSLog(@"数据库创建成功!");
            //2.创建表
            NSString *str = @"CREATE TABLE IF NOT EXISTS t_student (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, score REAL NOT NULL)";
            if ([db executeUpdate:str]) {
                NSLog(@"表创建成功!");
            }else{
                NSLog(@"创建表失败!");
            }
        }else{
            NSLog(@"数据库创建失败!");
        }

    }];

[self.dataBaseQ inDatabase:^(FMDatabase *db) {
        //3.增加 数据 (100条 数据随机)
        for (int i = 0; i <100; i++) {
            
            NSString *strName = [NSString stringWithFormat:@"8mingyeuxin-%d",i];
            
            NSString *sqlStr = [NSString stringWithFormat:@"INSERT INTO t_student (name ,score)VALUES('%@',%.02f)",strName,arc4random_uniform(1000)/10.0];
            
            //执行 //非查询语句  执行的方法
            BOOL success =  [db executeUpdate:sqlStr];
            if (success) {
                NSLog(@"添加成功!");
            }else{
                NSLog(@"添加失败!");
            }
            
        }

    }];

[self.dataBaseQ inDatabase:^(FMDatabase *db) {
       
        NSString *strSql =  @"SELECT * FROM t_student WHERE score > 60.0 ORDER BY score DESC;";
        //查询语句  执行的方法
        FMResultSet *set =  [db executeQuery:strSql];
        
        while ([set next]) {
            //name
            //NSString *name = [set stringForColumnIndex:1];
            NSString *name = [set stringForColumn:@"name"];
            //score
            CGFloat score = [set doubleForColumn:@"score"];
            
            NSLog(@"name = %@  score = %f",name,score);
        }

        
    }];

FMDB线程安全的更多相关文章

  1. 李洪强iOS开发之FMDB线程安全的用法

    // //  ViewController.m //  04 - FMDB线程安全的用法 // //  Created by 李洪强 on 2017/6/6. //  Copyright © 2017 ...

  2. iOS- Swift:使用FMDB进行数据库操作(线程安全:增删改查)

    1.前言 GitHub上2000多颗星的FMDB数据库框架想来大家都很熟悉, 今天用Swift对其进行了一个完成的数据存储读流程 写完之后用博客分享之,与大家一起交流, 希望对需要的朋友提供些帮助   ...

  3. FMDB的线程安全

    最近面试被问到FMDB的多线程处理问题,因为之前项目中是移植别人的代码,没有踩过这里的坑. 问题: 多线程同时访问数据库时,报数据库锁定的问题,错误信息是: Unknown error finaliz ...

  4. 【原】FMDB源码阅读(一)

    [原]FMDB源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 说实话,之前的SDWebImage和AFNetworking这两个组件我还是使用过的,但是对于 ...

  5. FMDB的使用方法

    转自:http://blog.devtang.com/blog/2012/04/22/use-fmdb/ 前言 SQLite (http://www.sqlite.org/docs.html) 是一个 ...

  6. FMDB 排它锁

    -------------------------------------基本操作------------------------------------- #import "ViewCon ...

  7. CoreData和SQLite多线程访问时的线程安全

    关于CoreData和SQLite多线程访问时的线程安全问题 数据库读取操作一般都是多线程访问的.在对数据进行读取时,我们要保证其当前状态不能被修改,即读取时加锁,否则就会出现数据错误混乱.IOS中常 ...

  8. IOS数据存储之FMDB数据库

    前言: 最近几天一直在折腾数据库存储,之前文章(http://www.cnblogs.com/whoislcj/p/5485959.html)介绍了Sqlite 数据库,SQLite是一种小型的轻量级 ...

  9. FMDB第三方框架

    FMDB是同AFN,SDWebImage同样好用的第三方框架,它以OC的方式封装了SQLite的C语言API,使得开发变得简单方便. 附上github链接https://github.com/ccgu ...

随机推荐

  1. 【小白的CFD之旅】03 老蓝

    第一次见到老蓝,小白都不太敢相信,对面那不修边幅的糟老头子会是自己要找的导师.嘴里叼着烟,牙都掉了好几颗,穿着还算整齐,这是小白对老蓝的第一印象,这印象并不太好,尤其是在小白发誓认真度过研究生三年时光 ...

  2. css3 选择器(三)

    接css3选择器(一) 接css3 选择器(二) 这篇和前两篇内容相关性不大,主要是涉及到一些css3的状态选择器,所以标题从一开始. 一.[:enabled]选择器 一看这个属性就知道是专为表单元素 ...

  3. 【读书笔记《Bootstrap 实战》】6.单页营销网站

    我们已经掌握了很多实用 Bootstrap  的重要技能.现在,是时候拿出更多的创意来帮助客户实现他们全方位在线营销的愿望了.此次将带领大家做一个漂亮的单页高端营销网站. 主要任务如下: □ 一个大型 ...

  4. NOIP模拟赛20161114

    幸运串 题意:长度为n,字符集大小为m的字符串中有多少不同的不含回文的串 n,m<10^9 我靠这不就是萌数的DP部分吗 有规律 f[2][j][k]=1 f[i][j][k]=sigma{f[ ...

  5. java 异常

    1.java异常 2.自定义抛出 3.运行时异常,程序有问题,让使用者可以改' ' 4.return  和  throw的区别 return 符合函数要求的值    throw  有问题的时候用它结束 ...

  6. 导出本地和远程SVN项目, Export remote SVN repository

    在有服务器控制权的情况下, 源服务器上 sudo svnadmin dump ironbank/ > ~/ironbank.svn.dump 在目的服务器上 sudo svnadmin crea ...

  7. GridView绑定Visible

    hyerLinkFiled的显示绑定方式 ,强制类型转换后再绑定! Visible='<%#Convert.ToBoolean(Eval("字段名")) %>'

  8. BBR拥塞控制算法

    BBR拥塞控制算法是Google最新研发的单边TCP拥塞控制算法Linux 内核4.9 已引入这个BBR算法,本人在CAC测试Ubuntu 14.04 安装Linux 4.9内核,延迟优化效果和TCP ...

  9. C#和C实现通过CRC-16 (Modbus)获取CRC值并校验数据(代码)

    文章首发于浩瀚先森博客 CRC的全称为Cyclic Redundancy Check,中文名称为循环冗余校验.它是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差 ...

  10. webpack --- 详解

    官网: http://webpack.github.io/docs/using-loaders.html 简书: http://www.jianshu.com/p/42e11515c10f