zoukankan      html  css  js  c++  java
  • 李洪强iOS开发之FMDB线程安全的用法

    //

    //  ViewController.m

    //  04 - FMDB线程安全的用法

    //

    //  Created by 李洪强 on 2017/6/6.

    //  Copyright © 2017 李洪强. All rights reserved.

    //

     

    #import "ViewController.h"

    //导入头文件

    #import "FMDB.h"

    @interface ViewController ()

    @property(nonatomic,strong)FMDatabaseQueue *dataBaseQ;

    @end

     

    @implementation ViewController

     

    - (void)viewDidLoad {

        [super viewDidLoad];

     

        NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]stringByAppendingPathComponent:@"student"];

        FMDatabaseQueue *dataBaseQ = [FMDatabaseQueue databaseQueueWithPath:path];

        _dataBaseQ = dataBaseQ;

        [_dataBaseQ inDatabase:^(FMDatabase * _Nonnull db) {

            

            BOOL success = [db open];

            if(success){

                NSLog(@"创建数据库成功");

                //创建表

                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(@"创建数据库失败");

            }

            

        }];

        

    }

    //增加数据

    - (IBAction)insertData:(UIButton *)sender {

        

        [_dataBaseQ inDatabase:^(FMDatabase * _Nonnull db) {

            for(int i = 0; i < 100 ; i++){

                NSString *strName = [NSString stringWithFormat:@"ming-yuexing-%d",i];

                NSString *sqlStr = [NSString stringWithFormat:@"INSERT INTO t_student (name , score) VALUES ('%@',%.2f)",strName,arc4random_uniform(1000)/10.0];

                BOOL success = [db executeUpdate:sqlStr];

                if(success){

                    NSLog(@"添加成功");

                }else{

                    NSLog(@"添加失败");

                }

            }

     

        }];

        

    }

     

    - (IBAction)selectData:(UIButton *)sender {

        [_dataBaseQ inDatabase:^(FMDatabase * _Nonnull db) {

            NSString *sqlStr = @"SELECT * FROM t_student WHERE score > 60.0 ORDER BY score DESC";

            //执行查询语句

            FMResultSet *set = [db executeQuery:sqlStr];

            while ([set next]) {

                NSString *name = [set stringForColumn:@"name"];

                CGFloat score = [set doubleForColumn:@"score"];

                NSLog(@"name = %@ score = %f",name,score);

            }

        }];

        

    }

     

    /*

     使用FMDBsql的好处:

     线程安全

     公共资源在A使用的时候,B不能修改

     

     

     

     

     

     

     */

     

    @end

  • 相关阅读:
    设计模式-设计原则(Design Principle)
    设计模式-装饰者模式(Decorator Pattern)
    C++-copy constructor、copy-assignment operator、destructor
    cocos2dx3.0-tinyxml在Android环境下解析xml失败的问题
    XACML-条件评估(Condition evaluation),规则评估(Rule evaluation),策略评估(Policy evaluation),策略集评估(PolicySet evaluation)
    XACML-<Target> 元素的结构与相关的评估
    XACML-PolicySet与request结构简介
    从接口自动化测试框架设计到开发(八)--python操作数据库
    从接口自动化测试框架设计到开发(七)--cookie处理
    从接口自动化测试框架设计到开发(六)--持续集成jenkins
  • 原文地址:https://www.cnblogs.com/LiLihongqiang/p/6952539.html
Copyright © 2011-2022 走看看