SQL简介
- SQL指结构化查询语言
- SQL使我们有能力访问数据库
- SQL是一种ANSI的标准计算机语言,
- SQL面向数据库执行查询
- SQL可从数据库取出数据
- SQL可在数据库中插入新的记录
- SQL可更新数据库中数据
- SQL可从数据库中删除数据
- SQL可在数据库中创建数据表
SQL语法
CREATE TABLE IF NOT EXISTS "表名"
(
"字段1" 类型1,
"字段2" 类型2,
"字段3" 类型3
PRIMARY KEY ("字段1",'"字段2")
);
增加 或 修改数据语法:
INSERT OR REPLACE INTO 表名 (字段1,字段2)VALUES (?,?);
删除数据语法:
DELETE FROM 表名 WHERE 条件1 OR 条件2 AND 条件3
查询数据语法
查询整张表
ORDER 默认是升序 ORDER BY 字段 DESC指降序
SELECT 字段1,字段2 FROM 表名 WHERE 条件 ORDER BY 字段 LIMIT 条数
FMDB
FMDB是一款简洁、易用的封装库。因此,在这里推荐使用第三方框架FMDB,它是对libsqlite3框架的封装,用起来的步骤与SQLite使用类似,并且它对于多线程的并发操作进行了处理,所以是县城安全的。
FMDB PK Sqlite
优点:
对多线程的并发操作进行处理,所以是线程安全的;
以oc的方式封装了sqlite的c语言api,使用起来更加的方便;
FMDB是轻量级的框架,使用灵活。
缺点:
因为它是oc的语言封装的,只能在ios开发的时候使用,所以在实现跨平台操作的时候存在局限性。
FMDB框架中重要的框架类
FMDatabase
FMDatabase对象就代表一个单独的SQLite数据库,用来执行sql语句
FMResultSet
使用FMDatabase执行查询后的结果集
FMDatabaseQueue 用于在多线程中执行多个查询或跟心,它是线程安全
数据库创建
创建FMDatabase对象时参数为SQLite数据库文件路径,该路径可以是以下三种方式之一
文件路径。该文件路径无需要真实存在,如果不存在会自动创建
空字符串(@“”),表示会在临时目录创建一个空的数据库,当FMDatabase连接关闭时,文件也会被删除
NULL.将创建一个内在数据库,同样的,当FMDatabase连接关闭,数据将会被销毁
FMDatabaseQueue
在多个线程中同时使用一个FMDatabase实例是不明智的。现在你可以为每个线程创建一个FMDatabase对象,不要让多个线程共享同一个实例,他无法在多个线程中同时使用。否则程序会时不时崩溃活着报告异常。所以,不要初始化FMDatabase对象,然后在多个线程中使用。这时候,我们就需要使用FMDatabaseQueue来创建队列执行事务。
FMDAtabaseQueue *queue = [[FMDatabaseQueue alloc] initWithPath:path];
//创建表,查询用这个方法
[self.queue inDatabase:^(FMDatabase * _Nonnull db) {
if ([db executeStatements:sql]) {
NSLog(@"创表成功");
} else {
NSLog(@"创表失败");
}
}];
插入活着删除数据要用事务函数,是线程安全的。
[_queue inTransaction:^(FMDatabase * _Nonnull db, BOOL * _Nonnull rollback) {
BOOL result = [db executeUpdate:sql withArgumentsInArray:@[@(statusId),@(userId)]];
if (result) {
NSLog(@"插入成功");
}
}];