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) ...
随机推荐
- 2Sigma OA prepare: Longest Chain
DP use HashMap: 根据string的长度sort,然后维护每个string的longest chain,default为1,如果删除某个char生成的string能提供更长的chain, ...
- Python 面向对象编程进阶
静态方法 只是名义上归类管理,实际上在静态方法里访问不了类或实例中的任何属性 通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在 ...
- H5 新标签用法及解释
HTML 5 是一个新的网络标准,目标在于取代现有的 HTML 4.01, XHTML 1.0 and DOM Level 2 HTML 标准.它希望能够减少浏览器对于需要插件的丰富性网络应用服务(p ...
- C# 对象的序列化与反序列化 (DataContractJsonSerializer)
项目引用 System.Runtime.Serialization.dll 添加命名空间 using System.Runtime.Serialization.Json; 1.序列化对象,得到Json ...
- [原创]java WEB学习笔记100:Spring学习---Spring Bean配置:SpEL详细介绍及代码演示
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- awk改变了OFS,$0却没变化
一个文件1.txt,内容如下 a b c d e 目的把列变行,输出为: a b c d e 脚本如下: awk 'BEGIN{RS="";FS="\n";OF ...
- [转] GitHub上README.md教程
点击阅读原文 最近对它的README.md文件颇为感兴趣.便写下这贴,帮助更多的还不会编写README文件的同学们. README文件后缀名为md.md是markdown的缩写,markdown是一种 ...
- 【转】 #1451 - Cannot delete or update a parent row: a foreign key constraint fails 问题的解决办法
转载地址:http://blog.csdn.net/donglynn/article/details/17056099 错误 SQL 查询: DELETE FROM `zmax_lang` WHERE ...
- ie11媒体查询以及其他hack
<!doctype html> <html> <head> <title>IE10/11 Media Query Test</title> ...
- JavaEE程序员必读图书大推荐
下面是我根据多年的阅读和实践经验,给您推荐的一些图书: 第一部分: Java语言篇 1 <Java编程规范> 星级: 适合对象:初级,中级 介绍:作者James Gosling(Java之 ...