ios FMDB类库的使用 学习笔记

文章摘自: 
文顶顶 iOS开发数据库篇—FMDB简单介绍

什么是FMDB

FMDB是ios平台的sqlite数据库框架

FMBD以oc的方式封装了sqlite的c语言API

FMDB的优点

使用起来更加面向对象,省去了很多麻烦、冗余的c语言代码

比苹果的core Data框架,更加轻量级和灵活

提供了多线程安全的数据库操作方法,有效地防止数据混乱

FMDB的github地址

https://github.com/ccgus/fmdb

核心类

FMDB有三个主要的类

1、FMDatabase

一个FMDatabase对象就代表一个单独的sqlite数据库,来执行sql语句

2、FMResultSet

使用FMDatabase执行查询后的结果集

3、FMDatabaseQueue

用于在多线程中执行多个查询或者更新,它是线程安全的。

打开数据库

通过制定sqlite数据库文件路径来创建FMDatabase对象

FMDatabase *db = [FMDatabase databaseWithPath:path];

if (![db open]) {

    NSLog(@"数据库打开失败!");

}

文件路径有三种情况

1、具体文件路径
(文件不存在会自动创建)

2、空字符串@""
(会在临时目录创建一个空的数据库,当FMDatabase连接关闭时,数据库文件也被删除)

3、nil
(创建一个内存中临时数据库,当FMDatabase连接关闭时,数据库会被销毁)

执行更新

在FMDB中,除了查询意外所有的操作,都称为更新

Create 、drop、insert、update、delete 等

使用executeUpdate方法执行更新

- (BOOL)executeUpdate:(NSString*)sql, ...

- (BOOL)executeUpdateWithFormat:(NSString*)format, ...

- (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments

示例

[db executeUpdate:@"UPDATE t_student SET age = ? WHERE name = ?;", @20, @"Jack"]

执行查询方法

- (FMResultSet *)executeQuery:(NSString*)sql, ...

- (FMResultSet *)executeQueryWithFormat:(NSString*)format, ...

- (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments

示例

// 查询数据

FMResultSet *rs = [db executeQuery:@"SELECT * FROM t_student"];
while ([rs next]) {

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

    int age = [rs intForColumn:@"age"];

    double score = [rs doubleForColumn:@"score"];

}

类库的使用:

//打开数据库
+ (FMDatabase *)openDB
{
    NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES) lastObject];
    NSString *fileName = [filePath stringByAppendingString:@"BaiduMap.sqlite"];

    FMDatabase *db = [FMDatabase databaseWithPath:fileName];

    if ([db open]) {
        return db;
    }
    return nil;
}

#pragma mark - 数据库更新
//除查询外其他操作均为更新
+ (BOOL)upDate : (NSString *)sql
{
    FMDatabase *db = [self openDB];
    if (db != nil) {
        return [db executeUpdate:sql];
    }
    return NO;
}

#pragma mark - 数据库创建表
+ (BOOL) createTable
{

    FMDatabase *db = [self openDB];
    if (db != nil) {
        NSString *sql = @"CREATE TABLE location_record(ID INTEGER PRIMARY KEY AUTOINCREMENT ,latitude REAL NOT NULL,longitude REAL NOT NULL,time TEXT NOT NULL";
        return [db executeUpdate:sql];

    }
    return NO;
}

#pragma  mark - 插入数据
+ (BOOL)insert:(float)latitude :(float)longitude :(NSString *)time
{
    NSString *sql = [NSString stringWithFormat: @"INSERT INTO location_record(latitude,longitude,time) values(%f,%f,%@)",latitude,longitude,time];
    return [self upDate:sql];
}

#pragma  mark - 查询
+ (NSArray *)query :(NSString *)starTime :(NSString *)endTime :(int)startNumber
{
    FMDatabase *db = [self openDB];
    if (db != nil) {
        NSString * sql = [NSString stringWithFormat:@"SELECT (latitude,longitude) FROM location_record WHERE time>%@ AND time <%@ limit %d,60",starTime,endTime,startNumber];
        FMResultSet *resultSet = [db executeQuery:sql];
        NSMutableArray *array = [NSMutableArray array];
        while ([resultSet next]) {
            double latitude = [resultSet doubleForColumnIndex:1];
            double longitude= [resultSet doubleForColumnIndex:2];
            [array addObject:[NSNumber numberWithDouble: latitude]];
            [array addObject:[NSNumber numberWithDouble:longitude]];
        }
        return array;
    }
    return nil;
}

前人栽树后人乘凉——吃水不忘挖井人

·

时间: 2024-11-09 04:44:20

ios FMDB类库的使用 学习笔记的相关文章

ios/mac/COCOA系列 -- UIALertVIew 学习笔记

最近在学习ios开发,学习的书籍<ios7 Pragramming cookbook>,做笔记的目的以后方便查看.笔记形式是小例子,将书上的例子书写完整. UIAlertViewClass 的使用场景 1,向用户以一个警告的形式显示信息. 2,让用户确认一些动作 3,让用户输入用户名和密码 4,让用户输入一些文本,这些文本在程序被使用 例1   实现简单显示一些警告信息 新建一个 Single View Application 简单工程,工程名字维AlterView,扩展前缀CB   代码如下

《iOS应用架构谈》学习笔记

见过很多代码,有些大型项目的代码还是很乱,逻辑思路不清晰,各种回调不明确.有些架构的扩展性很差,甚至很多crash都是由于架构不合理导致. 架构的设计需要了解产品的业务,未来的走向来制定.经验对于架构而言非常重要. 通过学习<iOS应用架构谈>,有了深刻的理解 http://casatwy.com/iosying-yong-jia-gou-tan-viewceng-de-zu-zhi-he-diao-yong-fang-an.html

iOS多线程之GCD学习笔记

什么是GCD 1.全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 2.纯C语言,提供了非常多强大的函数 GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核.四核) GCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程) 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码 任务和队列 GCD中有2个核心概念 任务:执行什么操作 队列:用来存放任务 GCD的使用就2个步骤,首先确定定制任务(

ios 控件代码transform学习笔记

1.图片设置(平移,缩放,旋转) 创建一个transform属性 //按钮点击时,只能执行一次向上旋转 //派 M_PI_4 45度旋转 1. CGAffineTransform transforms= CGAffineTransformMakeRotation(M_PI_4); //按钮点击时,可多次执行缩放 //self.image.transfrom 获取原始位置 image是图片定义的属性名称 2. CGAffineTransform transforms = CGAffineTrans

《慕客网:IOS-动画入门》学习笔记 &lt;一&gt;

新建Cocoa Touch Class,语言是swift 然后继续为界面添加一个普通的View Controller,并且添加前面视图的静态table的转向剪头指向这个View Controller,然后在这个视图上添加普通的UIView

iOS学习笔记(十六)——数据库操作(使用FMDB)

iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.PlausibleDatabase.sqlitepersistentobjects等,FMDB (https://github.com/ccgus/fmdb) 是一款简洁.易用的封装库,这一篇文章简单介绍下FMDB的使用. 在FMDB下载文件后,工程中必须导入如下文件,并使用 libsqlite3.dylib 依赖包. FMDB同时兼容ARC和非ARC工

IOS开发学习笔记(二)-语音识别(科大讯飞)

上次简单地讲解了如何利用科大讯飞完成语音合成,今天接着也把语音识别整理一下.当然,写代码前我们需要做的一些工作(如申请appid.导库),在上一篇语音合成的文章当中已经说过了,不了解的可以看看我上次的博文,那么这次直接从堆代码开始吧. 详细步骤: 1.导完类库之后,在工程里添加好用的头文件.在视图里只用了一个UITextField显示识别的内容,两个UIButton(一个开始监听语音,一个结束监听),然后引入类.添加代理,和语音合成的一样. MainViewController.h 1 #imp

iOS 学习笔记——0005(数据存储)

先发一个练手的小demo,自己写的简略通讯录,已上传至github https://github.com/liaoshaolim/addressBook 1.NSKeyedArchiver:(归档) 这里用一个添加联系人的例子来说明: 注意:归档形式保存数据,需要该对象遵守NSCoding协议,而且对应的必须提供encodeWithCoder和initWithCoder方法 因为归档是一次性的,解压也是一次性的,所以小量的ok,如果量大的话,改一个小地方就要归档或解压全部,效率会比较低 //用一

iOS学习笔记16-数据库SQLite

一.数据库 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等.离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式: 1. 归档:NSKeyedArchiver 2. 偏好设置:NSUserDefaults 3. plist存储:writeToFile 上述的使用可以参考iOS学习笔记15-序列化.偏好设置和归档,但上述三种方法都有一个致命的缺点,那就是都无法存储大批量的数据,有性能的问题,在这个时候就是使用数据库的时候. 数据库(Database)是按照数据结构来组