iOS开发数据库篇—FMDB数据库队列
iOS开发数据库篇—FMDB数据库队列
一、代码示例
1.需要先导入FMDB框架和头文件,由于该框架依赖于libsqlite库,所以还应该导入该库。
2.代码如下:
//
// YYViewController.m
// 05-FMDB数据库队列
//
// Created by apple on 14-7-28.
// Copyright (c) 2014年 wendingding. All rights reserved.
// #import "YYViewController.h"
#import "FMDB.h" @interface YYViewController ()
@property(nonatomic,strong)FMDatabaseQueue *queue;
@end @implementation YYViewController - (void)viewDidLoad
{
[super viewDidLoad]; //1.获得数据库文件的路径
NSString *doc=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *fileName=[doc stringByAppendingPathComponent:@"person.sqlite"]; //2.获得数据库队列
FMDatabaseQueue *queue=[FMDatabaseQueue databaseQueueWithPath:fileName];
// FMDatabase *db=[FMDatabase databaseWithPath:fileName]; //3.打开数据库
[queue inDatabase:^(FMDatabase *db) {
BOOL result=[db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_person (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"];
if (result) {
NSLog(@"创表成功");
}else
{
NSLog(@"创表失败");
}
}];
self.queue=queue; } -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//插入数据
// [self.queue inDatabase:^(FMDatabase *db) {
// [db executeUpdate:@"INSERT INTO t_person (name, age) VALUES (?, ?);",@"wendingding", @22];
// }]; //查询数据
[self.queue inDatabase:^(FMDatabase *db) {
// 1.执行查询语句
FMResultSet *resultSet = [db executeQuery:@"SELECT * FROM t_person"]; // 2.遍历结果
while ([resultSet next]) {
int ID = [resultSet intForColumn:@"id"];
NSString *name = [resultSet stringForColumn:@"name"];
int age = [resultSet intForColumn:@"age"];
NSLog(@"%d %@ %d", ID, name, age);
}
}]; } @end
先插入数据,之后查询结果,打印如下:
3.代码说明


//插入数据
[self.queue inDatabase:^(FMDatabase *db) {
[db beginTransaction];
[db executeUpdate:@"INSERT INTO t_person (name, age) VALUES (?, ?);",@"wendingding", @];
[db executeUpdate:@"INSERT INTO t_person (name, age) VALUES (?, ?);",@"wendingding", @];
[db executeUpdate:@"INSERT INTO t_person (name, age) VALUES (?, ?);",@"wendingding", @];
[db executeUpdate:@"INSERT INTO t_person (name, age) VALUES (?, ?);",@"wendingding", @];
[db commit];
}];
如果中途出现问题,那么会自动回滚,也可以选择手动回滚。
//插入数据
[self.queue inDatabase:^(FMDatabase *db) {
[db beginTransaction];
[db executeUpdate:@"INSERT INTO t_person (name, age) VALUES (?, ?);",@"wendingding", @];
[db executeUpdate:@"INSERT INTO t_person (name, age) VALUES (?, ?);",@"wendingding", @];
[db executeUpdate:@"INSERT INTO t_person (name, age) VALUES (?, ?);",@"wendingding", @];
[db rollback];
[db executeUpdate:@"INSERT INTO t_person (name, age) VALUES (?, ?);",@"wendingding", @];
[db commit];
}];
上面的代码。前三条插入语句是作废的。
事务处理的另一种方式:
[self.queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
[db executeUpdate:@"INSERT INTO t_person (name, age) VALUES (?, ?);",@"wendingding", @];
[db executeUpdate:@"INSERT INTO t_person (name, age) VALUES (?, ?);",@"wendingding", @];
[db executeUpdate:@"INSERT INTO t_person (name, age) VALUES (?, ?);",@"wendingding", @];
}];
说明:先开事务,再开始事务,之后执行block中的代码段,最后提交事务。
iOS开发数据库篇—FMDB数据库队列的更多相关文章
- iOS开发——高级篇——FMDB 数据库简单使用
#import <Foundation/Foundation.h> @interface UserDB : NSObject // 把userDB设计成一个单例类 + (id)shareI ...
- iOS开发数据库篇—FMDB简单介绍
iOS开发数据库篇—FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来 ...
- iOS开发 数据缓存-数据库
iOS中数据存储方式 Plist(NSArray\NSDictionary) Preference(偏好设置\NSUserDefaults) NSCoding (NSKeyedArchiver\NSk ...
- iOS开发网络篇—数据缓存
iOS开发网络篇—数据缓存 一.关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造 ...
- iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist)
iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存 ...
- iOS开发网络篇—数据安全
iOS开发网络篇—数据安全 一.简单说明 1.说明 在开发应用的时候,数据的安全性至关重要,而仅仅用POST请求提交用户的隐私数据,还是不能完全解决安全问题. 如:可以利用软件(比如Charles)设 ...
- 在iOS开发中使用FMDB
在iOS开发中使用FMDB 前言 SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.iOS SDK 很早就支持了 SQLite,在使用时,只需 ...
- 【转】在iOS开发中使用FMDB
本文转载自:唐巧的博客 在iOS开发中使用FMDB APR 22ND, 2012 前言 SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.iO ...
- iOS 开发多线程篇—GCD的常见用法
iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...
随机推荐
- 0523 Scrum 项目6.0
团队名称:√3 团队目标:全力完成这次的项目 团队口号:我要改变世界,改变自己!!! 演讲稿:我们的产品 鸡汤精选 是为了解决 当下社会出现的太多的负能量使得人们的内心十分 的痛苦, 他们需要强大的正 ...
- 大数的乘法(C++)
题目:POJ 2398 Bull Math Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13410 Accepted: ...
- [Effective JavaScript 笔记]第66条:使用计数器来执行并行操作
第63条建议使用工具函数downloadAllAsync接收一个URL数组并下载所有文件,结果返回一个存储了文件内容的数组,每个URL对应一个字符串.downloadAllAsync并不只有清理嵌套回 ...
- php中rsa加密及解密和签名及验签
加密的内容长度限制为密钥长度少位,如位的密钥最多加密的内容为个长度. 公钥加密 $public_content=file_get_contents(公钥路径); $public_key=openssl ...
- C#:涉及DPI的高分辨率下的显示问题
一.背景 在PC机上显示正常,在高分辨率下的Pad上,显示出现问题: 1.显示在屏幕最右端的窗体(控件)显示不出来: 2.截图时,被截图的界面字体文字变大,界面因此显示不全. 二.解决方法: 方法一: ...
- Knights of the Round Table-POJ2942(双连通分量+交叉染色)
Knights of the Round Table Description Being a knight is a very attractive career: searching for the ...
- Unity3D 材质球设置参数无效果的解决方法
要设置shader里有下划线的属性名,而不是后面字符串的属性名. Color tmp = ,,,alpha); mat.SetColor("_Color", tmp);
- U3D使anim,unity,prefab文件不显示乱码
Edit-Project Setting-Editor-Asset Serialization-mode Force Text
- (转)mysql中InnoDB表为什么要建议用自增列做主键
InnoDB引擎表的特点 1.InnoDB引擎表是基于B+树的索引组织表(IOT) 关于B+树 (图片来源于网上) B+ 树的特点: (1)所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关 ...
- R实战之热点图(HeatMap)
快速实现是搜索帮助文档的首要目的,所以此处涉及实战的文章一概略去传统帮助文档的理论部分,直接上代码加注释! 本文将介绍R语言下利用ggplot2包制作heatmap的代码 -------------- ...