//

//  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);

}

}];

}

/*

使用FMDB比sql的好处:

线程安全

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

*/

@end

李洪强iOS开发之FMDB线程安全的用法相关推荐

  1. 李洪强iOS开发之RunLoop的原理和核心机制

    李洪强iOS开发之RunLoop的原理和核心机制 搞iOS之后一直没有深入研究过RunLoop,非常的惭愧.刚好前一阵子负责性能优化项目,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研 ...

  2. 李洪强iOS开发之OC[012] -类的声明实现小结

    // //  main.m //  11 - 内容总结 // //  Created by vic fan on 16/7/9. //  Copyright © 2016年 李洪强. All righ ...

  3. 李洪强iOS开发之Foundation框架—结构体

    Foundation框架-结构体 一.基本知识 Foundation-基础框架.框架中包含了很多开发中常用的数据类型,如结构体,枚举,类等,是其他ios框架的基础. 如果要想使用foundation框 ...

  4. 李洪强iOS开发之-cocopods安装

  5. 李洪强iOS经典面试题144-数据存储

    李洪强iOS经典面试题144-数据存储   数据存储 sqlite中插入特殊字符的方法和接收到处理方法. 除'其他的都是在特殊字符前面加"/",而 ' -> '' .方法:k ...

  6. 李洪强iOS经典面试题153- 补充

    李洪强iOS经典面试题153- 补充   补充 有空就来解决几个问题,已经懒癌晚期没救了... UML 统一建模语言(UML,UnifiedModelingLanguage)是面向对象软件的标准化建模 ...

  7. 李洪强iOS经典面试题36-简单介绍 ARC 以及 ARC 实现的原理

    李洪强iOS经典面试题36-简单介绍 ARC 以及 ARC 实现的原理 问题 简单介绍 ARC 以及 ARC 实现的原理. 考查点 ARC 是苹果在 WWDC 2011 提出来的技术,因此很多新入行的 ...

  8. 李洪强iOS开发之- 实现简单的弹窗

     李洪强iOS开发之- 实现简单的弹窗 实现的效果:  112222222222223333333333333333

  9. 李洪强iOS开发Swift篇—02_变量和常量

    李洪强iOS开发Swift篇-02_变量和常量 一.语言的性能 (1)根据WWDC的展示 在进行复杂对象排序时Objective-C的性能是Python的2.8倍,Swift的性能是Python的3. ...

最新文章

  1. Android stadio
  2. cassandra的命令
  3. table类型数据提交_OGG数据同步异常问题总结
  4. Spring DefaultListableBeanFactory
  5. Docker 安装Centos,Tomcat,Jdk等相关的自定义(Dockerfile)镜像
  6. RabbitMQ入门(2)--工作队列
  7. java 知识积累_java学习知识积累-spring常用注解
  8. 语音识别哪家强?百度 、苹果、科大讯飞都有制胜法宝
  9. 社工必备查询网址汇总
  10. Vue中的filter过滤器是使用方法
  11. “掌上理财”项目总结
  12. 把音频中的某个人声去掉_怎样去掉音频中的背景音乐 只保留人声?
  13. 导出虚拟机的OVF 模板
  14. OC循环渐进:文件管理--计算文件大小的五种方式
  15. Docker 安装、使用
  16. java 查看内存_java 内存查看工具
  17. 谷歌浏览器F12抓包如何过滤只显示接口请求不显示图片、js那些请求
  18. Hi3516DV300开发板固件烧录
  19. Stata:图示连续变量的连续边际效应
  20. 在HTML中实现上划线,中划线和下划线

热门文章

  1. textview加载html glide,TextView加载HTML,文字和图片
  2. java不显示图片_Java图片显示不出来,怎么解决
  3. mysql建库权限_mysql数据库用户权限及建库脚本
  4. go 字符串转日期_Go技术日报(20200831)
  5. oracle19c监听服务启动失败,Oracle19c安装(有失败成功记录)
  6. uniapp光标自动定义到文本框_特检自动化行吊静力检测方案
  7. trace java_使用java动态字节码技术简单实现arthas的trace功能。
  8. springcloud 相同服务名_浅谈分布式与微服务
  9. android 混合开发 图片,混合开发的大趋势之一React Native之Image
  10. 插入排序之表插入排序