FMDB慢慢整理

来自: http://my.oschina.net/TaciturnKnightYQ/blog/617795

一、FMDB架构图

FMDB慢慢整理_第1张图片

二、核心类

FMDatabase

一个FMDatabase对象就代表一个单独的SQLite数据库
用来执行SQL语句
FMDatabase这个类是线程不安全的,如果在多个线程中同时使用一个FMDatabase实例,会造成数据混乱等问题
为了保证线程安全,FMDB提供方便快捷的FMDatabaseQueue类

FMResultSet

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

FMDatabaseQueue

用于在多线程中执行多个查询或更新,它是线程安全的
FMDatabaseQueue 这个类在多个线程来执行查询和更新时会使用这个类。避免同时访问同一个数据。

注意点:

  1. FMDatabaseQueue是一个串行队列,它不支持串行任务嵌套执行
  2. FMDatabaseQueue不是在次线程中操作、若要次线程操作在外面要包一个
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{ });

注意:打开数据库,文件路径有三种情况

  1. 具体文件路径:如果不存在会自动创建
  2. 空字符串@”“:会在临时目录创建一个空的数据库,当FMDatabase连接关闭时,数据库文件也被删除‘
  3. nil:会创建一个内存中临时数据库,当FMDatabase连接关闭时,数据库会被销毁
    // 通过指定SQLite数据库文件路径来创建FMDatabase对象

在FMDB中,除查询以外的所有操作,都称为“更新”:create、drop、insert、update、delete等

// 使用executeUpdate:方法执行更新
- (BOOL)executeUpdate:(NSString*)sql, ...
- (BOOL)executeUpdateWithFormat:(NSString*)format,...
- (BOOL)executeUpdate:(NSString*)sqlwithArgumentsInArray:(NSArray*)arguments
执行查询
- (FMResultSet*)executeQuery:(NSString*)sql, ...
- (FMResultSet*)executeQueryWithFormat:(NSString*)format,...
- (FMResultSet*)executeQuery:(NSString*)sqlwithArgumentsInArray:(NSArray*)arguments

三、常见sql语句

-- 创表
CREATE TABLE IF NOT EXISTS 'T_Person' ( "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "name" TEXT, "age" INTEGER, "height" REAL );

-- 插入
INSERT INTO T_Person (name, age, height) VALUES ('张三', 18, 1.5);


-- 更新
UPDATE T_Person set name = '老王', age = 80, height = 1.2 WHERE id = 10000;


-- 删除


DELETE FROM T_Person WHERE id = 3000;


-- 查询


-- 开发中建议使用的,便于阅读
SELECT id, name, height, age FROM T_Person;

-- 统计查询
SELECT count(*) FROM T_Person;

-- 指定条件统计查询
SELECT count(*) FROM T_Person WHERE height > 1.5;

-- 查询年龄最大的人
-- 应用场景:查询经验最高的值,最近加入的人...
SELECT max(age) FROM T_Person;

-- 分页功能
-- LIMIT 从第几条记录开始(起始条数是 0), 返回的记录行数
SELECT id, name, height, age FROM T_Person LIMIT 0, 2;

-- LIMIT 和条件指令 WHERE 组合使用,可以很方便的作出分页功能
SELECT id, name, height, age FROM T_Person WHERE id >= 2 LIMIT 2;

-- 排序功能,默认是升序 ASC / 降序 DESC
-- 排序是按照指定的条件,由左至右依次排列
SELECT id, name, height, age FROM T_Person ORDER BY name DESC, age ASC;

-- 模糊查询
-- % 可以匹配任何内容 
-- %内容% 表示只要出现内容,都会被搜索出来
-- 逻辑判断 AND OR NOT
SELECT id, name, height, age FROM T_Person WHERE (name LIKE '%a%' AND age > 20) OR name = 'li';

你可能感兴趣的:(数据库,sqlite)