美文网首页
FMDB使用日记

FMDB使用日记

作者: FlowYourHeart | 来源:发表于2017-05-05 11:07 被阅读39次

在网上查过一些资料,感觉都千篇一律,不过也加深了自己对FMDB的认识,同时也能了解到作者对FMDB理解的深浅。当然不可能一篇文章就能完全让人明白理解并熟练的应用一个知识,唯有多看、多听、多学。

本文将不在赘诉关于:FMDB 是什么、优缺点、怎么安装、以及库里都有哪些类等等,如果有不知道的,请任意点开一篇关于FMDB的文章(除了本文😄)

创建一个数据库

Github截图1.png
创建数据库的路径说明
1、给一个完整确切的路径(数据库命名格式   xxx.db ),这个用上面的
[FMDatabase databaseWithPath:path] 就能在指定位置创建一个自己命名的 xxx.db 数据库;
2、当给一个@“”空字符串作为路径时,FMDatabase创建一个临时的数据库,当FMDatabase关闭数据库时,数据库销毁。同理当路径为NULL时也一样。
有了库,还不能存数据,必须建表.(略过)
数据库的打开与关闭

1、FMDatabase

用FMDatabase创建数据库时,每一次的打开都会伴随着关闭,这是为了数据库不被同时操作所必需的步骤 因为同时操作可能会出现问题,任何增删改查都在 打开后操作,关闭前结束

2、FMDatabaseQueue

FMDatabaseQueue是线程安全的,所以就不会有上面FMDatabase那样的打开就必须关闭的动作。对于FMDatabaseQueue有两种处理数据的方法

[queue inDatabase:^(FMDatabase *db) {
    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @1];
    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @2];
    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @3];
    FMResultSet *rs = [db executeQuery:@"select * from foo"];
    while ([rs next]) {
        …
    }
}];
[queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @1];
    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @2];
    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @3];
    if (whoopsSomethingWrongHappened) {//哎哟 something wrong happened
        *rollback = YES;
        return;
    }
    // etc ...
}];

第一种就是普通的操作数据,第二种是所谓的事务(transaction:交易、业务、事务、处理),所谓事务是指由一系列的事(ABC转换成小写)共同组成的一件事(大写转小写),如果中途任何一个环节出现问题(abC:C没能变成小写),整个事件都算失败,如果失败 设置*rollback = YES 那数据库的数据将不变(ABC)。

FMDB能不能存储对象

FMResultSet has many methods to retrieve data in an appropriate format:
当然可以, fmdb存储的类型
intForColumn:
longForColumn:
longLongIntForColumn:
boolForColumn:
doubleForColumn:

stringForColumn:
dateForColumn:
dataForColumn:
dataNoCopyForColumn:
UTF8StringForColumnName:
objectForColumnName:

但object不能直接存储,来看看FMDB内部是怎么处理的

- (id)objectForColumnName:(NSString*)columnName {
    return [self objectForColumnIndex:[self columnIndexForName:columnName]];
}
- (id)objectForColumnIndex:(int)columnIdx {
    int columnType = sqlite3_column_type([_statement statement], columnIdx);
    
    id returnValue = nil;
    
    if (columnType == SQLITE_INTEGER) {
        returnValue = [NSNumber numberWithLongLong:[self longLongIntForColumnIndex:columnIdx]];
    }
    else if (columnType == SQLITE_FLOAT) {
        returnValue = [NSNumber numberWithDouble:[self doubleForColumnIndex:columnIdx]];
    }
    else if (columnType == SQLITE_BLOB) {
        returnValue = [self dataForColumnIndex:columnIdx];
    }
    else {
        //default to a string for everything else
        returnValue = [self stringForColumnIndex:columnIdx];
    }
    
    if (returnValue == nil) {
        returnValue = [NSNull null];
    }
    
    return returnValue;
}

显而易见 object 的类型会是SQLITE_INTEGER、SQLITE_FLOAT、SQLITE_BLOB、SQLITE_TEXT中的一种,所以存储对象的方法之一是,把对象 归档 成NSData来进行存储

为了在程序中随处可用,最好建一个DBManager来管理 创建 以及增删改查,对于FMDB的封装已经很多了,可以选择一个舒服来用。

相关文章

  • FMDB使用日记

    在网上查过一些资料,感觉都千篇一律,不过也加深了自己对FMDB的认识,同时也能了解到作者对FMDB理解的深浅。当然...

  • iOS开发·FMDB的使用与知识梳理

    一、FMDB的介绍二、FMDB的使用说明三、FMDB的创建和使用方法 一、FMDB的介绍 FMDB是构建在SQLi...

  • iOS FMDB 学习笔记(理论篇)

    TopicList 一.FMDB 简介 二.FMDB 使用说明 三.FMDB 创建及使用方法 四.FMDataba...

  • FMDB 的使用

    FMDB 是对 sqlite 的封装,该文章通过使用 FMDB 对学生数据进行操作,学习记录 FMDB 的使用。1...

  • FMDB常用操作

    FMDB 使用框架 官网地址 https://github.com/ccgus/fmdb 直接拖拽 将 fmdb ...

  • SYCacheManager缓存数据操作

    SYCacheManager使用FMDB、LKDB进行二次封装,缓存数据。 FMDB的基本使用使用FMDataba...

  • FFDB

    FMDB的使用 FMDBDemo 目录 1、FMDB介绍2、FMDB导入3、FMDB框架中重要的框架类3.1、FM...

  • iOS开发--SQLite重要框架FMDB的使用

    iOS开发--SQLite重要框架FMDB的使用 iOS开发--SQLite重要框架FMDB的使用

  • fmdb 的使用

    fmdb 的使用:

  • FMDB的简单使用

    FMDB的下载地址是:https://github.com/ccgus/fmdb工程中使用FMDB,必须导入lib...

网友评论

      本文标题:FMDB使用日记

      本文链接:https://www.haomeiwen.com/subject/hcujtxtx.html