标签:
归档的操作
作用:主要用于自定义对象的持久化
使用:遵守<NSCoding协议>
- (void)encodeWithCoder:(NSCoder *)aCoder;
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder;
1.SQLite3的使用
1、要使用SQLite3,先要添加库文件 libsqlite3.dylib
2.导入头文件
import<sqlite3.h>
2.FMDB的介绍
1.FMDB是iOS平台的SQLite数据库框架,以OC的方式封装了SQLite的C语言API,使用起来比单纯调用SQLite语句方便
2.FMDB使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码
3.对比苹果自带的Core Data框架,更加轻量级和灵活
4.提供了多线程安全的数据库操作方法,有效地防止数据混乱
如果要使用FMDB
import "FMDB.h"
3.核心三大类
4.使用步骤
(1) 打开数据库
1.通过指定SQLite数据库文件路径来创建FMDatabase对象
FMDatabase *db = [FMDatabase databaseWithPath:path];
if ([db open]) {
// 数据库打开成功
}
2.使用实例:
// 1.获得数据库文件的路径
NSString *doc =[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
// 2.拼接文件名
NSString *filename = [doc stringByAppendingPathComponent:@"status.sqlite"];
// 3.得到数据库
_db = [FMDatabase databaseWithPath:filename];
// 4.打开数据库 .使用如下语句,如果打开失败,可能是权限不足或者资源不足。通常打开完操作操作后,需要调用 close 方法来关闭数据库。在和数据库交互 之前,数据库必须是打开的。如果资源或权限不足无法打开或创建数据库,都会导致打开失败。
if ([_db open]) {
// 5.创建表格
BOOL result = [_db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_home_status (id integer PRIMARY KEY AUTOINCREMENT, access_token text NOT NULL, status_idstr text NOT NULL, status_dict blob NOT NULL);"];
if (result) {
NSLog(@"成功创表");
} else {
NSLog(@"创表失败");
}
NULL: 表示该值为NULL值。
INTEGER: 无符号整型值。
REAL: 浮点值。
TEXT: 文本字符串,存储使用的编码方式为UTF-8、UTF-16BE、UTF-16LE。
BLOB: 存储Blob数据,该类型数据和输入数据完全相同。
3.路径设置:
1.如果设置的路径不存在,则会自动创建
2.如果为@""或者nil,则会在temp文件中创建一个空的数据库,当数据库关闭时,数据库文件也会被删除
(2) 执行插入:
使用FMDataBase类执行数据库插入命令SQL“insert into”
//1.executeUpdate:oc [self.db executeUpdate:@“INSERT INTO t_student (name, age) VALUES (?,?);”,name,@(age)];
//2.executeUpdateWithForamat:不确定的参数用%@,%d等来占位 (参数为原始数据类型,执行语句不区分大小写)
[self.db executeUpdateWithForamat:@“insert into t_student (name,age) values (%@,%i);”,name,age];
//3.参数是数组的使用方式
int age = 18;
[self.db executeUpdate:@“INSERT INTO t_student(name,age) VALUES (?,?);”withArgumentsInArray:@[name,@(age)]];
(3) 执行删除:
使用FMDataBase类执行数据库删除命令SQL“delete”
//1.不确定的参数用?来占位 (后面参数必须是oc对象,需要将int包装成OC对象)
int idNum = 101;
[self.db executeUpdate:@“delete from t_student where id = ?;”,@(idNum)];
//2.不确定的参数用%@,%d等来占位
[self.db executeUpdateWithFormat:@“ t_student = %@;”,@“apple_name”];
(4)执行更新
简单来说,只要不是以SELECT开头的命令都是更新命令。
1.CREATE,DROP,INSERT,UPDATE,DELETE等除了查询以外的操作,都称为更新操作
2.使用executeUpdate:方法做更新操作
[db executeUpdate:@"UPDATE t_student_classtwo SET age = ? WHERE name = ?;", @"18", @"stu"]
(5) 执行查询
1.执行数据库查询的方法:(查询使用FMResultSet对象)
SELECT命令就是查询,执行查询的方法是以-excuteQuery开头的。
FMResultSet获取不同数据格式的方法
2.使用示例
// FMResultSet *resultSet = [self.db execute Query:@“select * from t_student;”];
//根据条件查询
FMResultSet *resultSet = [self.db executeQuery:@“select * from t_student where id<?;”@(14)];
//排序查询
[_db executeQuery:@"select * from t_Student ORDER BY age DESC"] ,这个是通过age字段 降序排序 升序就是不写DESC
//遍历结果集合
while ([resultSet next])
{
int idNum = [resultSet intForColumn:@“id”];
NSString *name = [resultSet objectForColumn:@“name”];
int age = [resultSet intForColumn:@“age”];
}
(6) 数据库删除
使用FMDataBase类执行数据库销毁命令SQLdrop ...
// [self.db executeUpadate:@“drop table if exists t_student;”];
(7) 线程安全的数据库
为了保证线程安全,FMDB提供方便快捷的FMDatabaseQueue类
示例:
queue = [FMDatabaseQueue databaseQueueWithPath:path];
[db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"stu1"];
[db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"stu2"];
[db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"stu3"];
FMResultSet *results = [db executeQuery:@"select * from t_student"];
while ([results next]) {
// …
}
}];
标签:
原文地址:http://www.cnblogs.com/huiyi-520/p/5583369.html