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;
}

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

·

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。