最后更新:2017-02-22

2017, 说到做到


一: 初识FMDB

  1. FMDB是iOS平台的SQLite数据库框架
  2. FMDB以OC的方式封装了SQLite的C语言API
  3. GitHub链接: https://github.com/ccgus/fmdb

优点:

  1. 面向对象,使用更加简单,没必要写复杂的C语言代码;
  2. 提供多线程本安全,有效地防止数据混乱;

缺点:

1.用OC对SQLite的封装,失去了C语言的跨平台性;

二: 基本使用

FMDB有三个主要的类

  • FMDatabase – 表示一个单独的SQLite数据库。 用来执行SQLite的命令。

  • FMResultSet – 表示FMDatabase执行查询后结果集

  • FMDatabaseQueue – 如果你想在多线程中执行多个查询或更新,你应该使用该类。这是线程安全的。

三: 基本操作

1. 数据库创建

创建FMDatabase对象时参数为SQLite数据库文件路径。该路径可以是以下三种之一:

  1. 文件路径。

    • 该文件路径无需真实存,如果不存在会自动创建。
  2. 空字符串(@”")。

    • 表示会在临时目录创建一个空的数据库,当FMDatabase 链接关闭时,文件也被删除。
  3. NULL.

    • 将创建一个内在数据库。同样的,当FMDatabase连接关闭时,数据会被销毁.
FMDatabase *db = [FMDatabase databaseWithPath:path];

2. 打开数据库

在和数据库交互 之前,数据库必须是打开的,如果资源或权限不足无法打开或创建数据库,都会导致打开失败。

if (![db open]) {
[db release];
return;
}

3. 执行更新

一切不是SELECT命令的命令都视为更新。

这包括

  • CREATE (创建)
  • UPDATE (更新)
  • INSERT (插入)
  • ALTER
  • COMMIT,
  • BEGIN,
  • DETACH,
  • DELETE,
  • DROP,
  • END,
  • EXPLAIN,
  • VACUUM,
  • REPLACE。
  • 。。。

-(BOOL)executeUpdate:(NSString)sql, ...
-(BOOL)executeUpdateWithFormat:(NSString)format, ...
-(BOOL)executeUpdate:(NSString)sql withArgumentsInArray:(NSArray )arguments 执行更新返回一个BOOL值。YES表示执行成功,NO表示失败 执行错误,可以调用 -lastErrorMessage 和 -lastErrorCode方法来得到更多信息。

4.执行查询

  1. SELECT命令就是查询

    - (FMResultSet *)executeQuery:(NSString*)sql, ...
    - (FMResultSet *)executeQueryWithFormat:(NSString*)format, ...
    - (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments 成功返回 FMResultSet对象,错误返回 nil 执行错误,可以调用 -lastErrorMessage 和 -lastErrorCode方法来得到更多信息。
  2. 获取结果

    FMResultSet *s = [db executeQuery:@"SELECT * FROM myTable"];
    while ([s next]) {
    //retrieve values for each record
    }

FMResultSet 提供了很多方法来获得所需的格式的值:

```objc
intForColumn:
longForColumn:
longLongIntForColumn:
boolForColumn:
doubleForColumn:
stringForColumn:
dataForColumn:
dataNoCopyForColumn:
UTF8StringForColumnIndex:
objectForColumn:
```

你无需调用 [FMResultSet close]来关闭结果集, 当新的结果集产生,或者其数据库关闭时,会自动关闭。

5. 关闭数据库

当使用完数据库,你应该 -close 来关闭数据库连接来释放SQLite使用的资源。

 [db close];

结束

参开列表:唐巧-在iOS开发中使用FMDB

FMDB源码解析(上)-FMDB基本使用的更多相关文章

  1. FMDB源码解析

    上一篇博客讲述SQLite的使用,本篇将讲述FMDB源码,后面也会讲解SQLite在使用与FMDB的区别.本篇读下来大约20-30分钟,建议大家先收藏一下. FMDB是以OC方式封装SQLite中C语 ...

  2. Laravel学习笔记之Session源码解析(上)

    说明:本文主要通过学习Laravel的session源码学习Laravel是如何设计session的,将自己的学习心得分享出来,希望对别人有所帮助.Laravel在web middleware中定义了 ...

  3. spring源码解析--上

    本文是作者原创,版权归作者所有.若要转载,请注明出处. 首先是配置类 package com.lusai.config; import org.springframework.context.anno ...

  4. tinyxml源码解析(上)

    转载于:http://www.cnblogs.com/marchtea/archive/2012/11/09/2762669.html 前言: 前段时间做功能可行性的时候简单的使用了tinyxml.在 ...

  5. Kakfa揭秘 Day9 KafkaReceiver源码解析

    Kakfa揭秘 Day9 KafkaReceiver源码解析 上一节课中,谈了Direct的方式来访问kafka的Broker,今天主要来谈一下,另一种方式,也就是KafkaReceiver. 初始化 ...

  6. tinyxml源码解析(中)

    转载于:http://www.cnblogs.com/marchtea/archive/2012/11/20/2766756.html 前言: 之前趁着这段时间比较空闲,也因为听闻tinyxml大名, ...

  7. Spring源码解析系列汇总

    相信我,你会收藏这篇文章的 本篇文章是这段时间撸出来的Spring源码解析系列文章的汇总,总共包含以下专题.喜欢的同学可以收藏起来以备不时之需 SpringIOC源码解析(上) 本篇文章搭建了IOC源 ...

  8. 【原】FMDB源码阅读(二)

    [原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...

  9. 【原】FMDB源码阅读(一)

    [原]FMDB源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 说实话,之前的SDWebImage和AFNetworking这两个组件我还是使用过的,但是对于 ...

随机推荐

  1. centos7 VM虚拟机在主机关机重启后,无法ping通

    解决办法 1.虚拟机的某些网络相关的服务没有启动,打开电脑的服务启动相关服务 2.打开虚拟机的虚拟网络设置,恢复默认设置即可 3.判定虚拟网卡的网关和centos的网关是否一致,如果不一致,改成一致, ...

  2. P4290 [HAOI2008]玩具取名

    传送门 $dp$ 设 $f[i][j][k]$ 表示初始为 $k$ 时,能否得到 $[i,j]$ 这一段子串 设 $pd[i][j][k]$ 表示长度为二的字符串 $ij$ 能否由 $k$ 得到 然后 ...

  3. git分支/标签操作

    git分支类似于某一个模块,等到所有模块开发完毕时,最后聚合在一起形成一个项目.而分支之间一般是不会受影响的. git 分支的基本操作: git branch branchname 表示创建分支,新建 ...

  4. oracle数据库中的存储过程

    存储过程是一组为了完成特定功能的sql语句集,是一段sql代码片段,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果存储过程存在参就给出,不存在就不用给出参数)来执行它.因为它是一段 ...

  5. UDP即时小通信

    package 第十二章; import java.io.IOException; import java.net.*; public class UDPServer { /*** * * @para ...

  6. java中使用SimpleDateFormat实现字符串和日期的相互转换

    java中使用SimpleDateFormat实现字符串和日期的相互转换 import java.text.ParseException; import java.text.SimpleDateFor ...

  7. 常用的前端框架Angular、React、Vue

    VUE 一.vue导读 1.1 vue的优点:结合其他框架点,轻量级,中文API,数据驱动,双向绑定,MVVM设计模式,组件化开发,单页面应用 1.2 vue环境的导入: 本地导入 <!--方法 ...

  8. c#中DataTable和DataSet区别

    你可以把DataTable和DataSet看做是数据容器,比如你查询数据库后得到一些结果,可以放到这种容器里,那你可能要问:我不用这种容器,自己读到变量或数组里也一样可以存起来啊,为什么用容器? 原因 ...

  9. qthread线程

    一般调用quit()函数之后可以紧接着调用wait()函数确保线程退出.sleep()等让线程休眠的函数不需要调用,因为Qt中线程是事件驱动机制.但是如果是继承的QTHread类,在run()函数中使 ...

  10. warning MSB8030: The linker switch "Minimum Required Version" requires "SubS

    In the project properties, under Linker -> System, make sure that you set the SubSystem property ...