-------------------------------------基本操作-------------------------------------

#import "ViewController.h"

#import "FMDB.h"

@interface ViewController ()

@property (nonatomic,strong)FMDatabase *dataBase;

@end

@implementation ViewController

- (IBAction)insertData:(id)sender {

//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 =  [self.dataBase executeUpdate:sqlStr];

if (success) {

NSLog(@"添加成功!");

}else{

NSLog(@"添加失败!");

}

}

}

- (IBAction)selectData:(id)sender {

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

//查询语句 执行的方法

FMResultSet *set =  [self.dataBase 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);

}

}

- (void)viewDidLoad {

[super viewDidLoad];

//1.创建数据库

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

FMDatabase *dataBase = [FMDatabase databaseWithPath:path];

self.dataBase = dataBase;

BOOL success = [dataBase 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 ([self.dataBase executeUpdate:str]) {

NSLog(@"表创建成功!");

}else{

NSLog(@"创建表失败!");

}

}else{

NSLog(@"数据库创建失败!");

}

}

@end

-------------------------------------原子操作-------------------------------------

#import "ViewController.h"

#import "FMDB.h"

@interface ViewController ()

@property (nonatomic,strong)FMDatabaseQueue *dataBaseQ;

@end

@implementation ViewController

//线程安全 公共资源 A使用 的时候 B不能使用

//int a = 110;

//

//100 - 90;

//A  a = 10;

//

//排队等待:

//10 + 100

//

//B  a = 110;

- (IBAction)insertData:(id)sender {

[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(@"添加失败!");

}

}

}];

}

- (IBAction)selectData:(id)sender {

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

}

}];

}

- (void)viewDidLoad {

[super viewDidLoad];

//打开数据库 如果没有就创建

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

}

}];

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

FMDB 排它锁的更多相关文章

  1. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  2. 【原】FMDB源码阅读(二)

    [原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...

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

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

  4. IOS FMDB 获取数据库表和表中的数据

    ios开发中,经常会用到数据库sqlite的知识,除了增,删,改,查之外,我们说说如何获取数据库中有多少表和表相关的内容. 前言 跟数据库使用相关的一般的增删改查的语句,这里就不做解释了.在网上有很多 ...

  5. 简单的数据库设计及使用(FMDB)

    有这样一个需求: 有m个用户公用n个文件,一个用户可能会用到多个文件,一个文件可能被多个用户使用: 如果某个用户离开,那这个用户就不再使用任何文件:如果某个文件没有任何用户使用,就要删除该文件: 已知 ...

  6. FMDB的使用方法

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

  7. [ios]关于用FMDB 操作数据库 删除 tableView 后刷新

    刚了解使用fmdb,从数据库获取数据 绑定到一个可变数组classNameItems //从ClassList表取得数据 FMResultSet *classInfo=[db executeQuery ...

  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. 个人对RCU的理解

    本文对于RCU的概念不进行解释. 考虑一种比较让人困惑的情形,就是在grace period期间,有新的读者进入,那么这个读者拿到的是新数据还是旧数据,查阅了很多资料都没找到答案,当然对于链表的情况这 ...

  2. eclipse新建web项目开发JSP

    1.创建项目:file---new--Dynamic Web Project 一直选next,到jsp文件目录所在地,打勾默认自动生成web.xml配置文件,也可以自己设置. 创建JSP文件: 选择创 ...

  3. c语言经典算法—求0—7 所能组成的奇数个数

    题目:求0—7 所能组成的奇数个数. 算法思想:这个问题其实是一个排列组合的问题,设这个数为sun=a1a2a3a4a5a6a7a8,a1-a8表示这个数的某位的数值,当一个数的最后一位为奇数时,那么 ...

  4. IP分片详解

    IP分片是网络上传输IP报文的一种技术手段.IP协议在传输数据包时,将数据报文分为若干分片进行传输,并在目标系统中进行重组.不同的链路类型规定有不同最大长度的链路层数据帧,称为链路层MTU(最大传输单 ...

  5. Spark 官方文档(2)——集群模式

    Spark版本:1.6.2 简介:本文档简短的介绍了spark如何在集群中运行,便于理解spark相关组件.可以通过阅读应用提交文档了解如何在集群中提交应用. 组件 spark应用程序通过主程序的Sp ...

  6. Spring+Mybatis基于注解整合Redis

    基于这段时间折腾redis遇到了各种问题,想着整理一下.本文主要介绍基于Spring+Mybatis以注解的形式整合Redis.废话少说,进入正题. 首先准备Redis,我下的是Windows版,下载 ...

  7. HTML5存储之 indexedDB

    IndexeDB是HTML5 重要的一部分,它是一种轻量级的NOSQL数据库.对创建具有丰富本地存储数据的数据密集型的离线HTML5 Web 应用程序很有用. IndexedDB是为了能够在客户端存储 ...

  8. [转]大数据时代,python竟是最好的语言?

      随着大数据疯狂的浪潮,新生代的工具Python得到了前所未有的爆发.简洁.开源是这款工具吸引了众多粉丝的原因.目前Python最热的领域,非数据分析和挖掘莫属了.从以Pandas为代表的数据分析领 ...

  9. MySQL主从同步

    脚本 [root@test scripts]# cat ss.sh #!/bin/bash . /etc/init.d/functions MYUSER=root MYPASS=c565f972 SO ...

  10. FileUtil(from logparser)

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.ByteArrayOutputStream; ...