郑重声明:本人ios初级开发者,为自己学习方便,复制各位大神的学习性文章放在自己简书里,仅作为自己学习方便使用,如果作者疑此行为侵权,请随时联系本人删除,如有共同学习者复制此文章,请注明原出处
一. 数据持久化
数据持久化是通过文件将数据存储在磁盘上
iOS 主要有四中数据持久化方式
1>属性列表:就是plist文件,使用时,需要知道文件名,只适合NSArray、NSString等基本数据类型, 2>对象归档:NSKeyedArchiver,必须实现NSCoding协议方法 3>SQLite数据 4>CoreData:大型数据 5>NSUserDefaults 偏好设置 ,不需要知道文件名,小数据
持久化方式的对比
1>属性列表、对象归档适合小数据量存储和查询操作 2>SQLite、CoData适合大量数据存储和查询
二. 数据库介绍
数据库(DataBase)是按照数据结构来组织、存储和管理数据的仓库
数据库管理系统是一种操纵和管理的大型软件,用于建立、使用和维护数据库,常见的关系数据库管理系统有:Oracle/MSSQLserver/DB2/MySQL
三.SQL介绍
SQLite,是一款轻型的数据库(按照数据库结构来组织、存储和管理数据的仓库),是遵守 ACID 的关系型数据管理系统,它的设计目标是嵌入式的,目前很多的嵌入式产品中都使用了它,它占用资源非常低,在嵌入式设备中,可能只需要几百 K 的内存就够了。
四.基础的 SQL 语句
SQL 语句用于对数据进行存储、查询,更新等管理操作
1. 创建列表 SQLite3支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和 BLOB(二进制对象)数据类型,如果表存在则不再创建
实际上 SQLite 是无类型的,虽然声明 Integer类型,还是可以存储字符串文本(主键除外),创建表时声明啥类型或者不声明类型都可以,但是为了良好的编程规范、方便程序员之间的交流,编写建表语句的时候最好还是加上字段类型
CREATE TABLE IF NOT EXISTS user(username TEXT PRIMARY KEY,password TEXT, email TEXT)
2. 插入一条数据
INSERT INTO user(username,password,email)VALUES(?,?,?);
3. 删除一条数据
DELETE FROW user WHERE username = 'puke'
4. 更新一条数据
UPDATE user set password = '123456' where username = 'puke';
5. 查询数据
SELECT user,password,email FORM user where username = 'puke';
五. 数据库操作流程
首先导入libsqlite3.0.tbd框架,在延展里面声明两个全局变量
sqlite 是一个指针变量,用来操作数据库
sqlite3 *sqlite;
结果集,用来存放查询到的结果
sqlite3_stmt *stmt;打开数据库,如果路径上没有这个数据库,系统就会自动创建一个数据库
int result = sqlite3_open�([filePath UTF8String], &sqlite); if (result != SQLITE_OK) { NSLog(@"打开数据库失败"); } 参数1:数据库所在的路径,由于 sqlite 是 C 语言编写的,通过[filePath UTF8String]将 OC 的字符串转化为 C 的字符串 参数2:数据库指针。这句代码运行完成以后会给 sqlite 指针赋值
编译 SQL语句
NSString *sql = @"INSERT INTO User(name, age) VALUES (? ? ?)"; sqlite3_prepare_v2(sqlite, [sql UTF8String], -1, &stmt, NULL); 参数1:数据库指针 参数2:sql 语句,使用 UTF-8编码 参数3:sql 语句执行的字节长度, -1表示该语句全部执行 参数4:返回一个结果集 参数5:存放没有执行的 sql 语句
参数绑定
sqlite3_bind_text(stmt, 1, [name UTF8String], -1, NULL); sqlite3_bind_int(stmt, 2, age); 参数1:数据库指针 参数2:序号,也就是说绑定到第几个问号 参数3:绑定的数据 参数4:sqlite 语句执行字节长度, -1表示该语句全部执行 参数5:回调函数,语句执行完毕后会调用
执行 SQL 语句,增删改查或创表
int result = sqlite3_step(stmt) if (result == SQLITE_ERROR || SQLITE_MISUSE) { NSLog(@"执行 SQL 语句失败"); return; }
语句完结
sqlite3_finalize(stmt)
关闭数据库
sqlite3_close(sqlite);
PS: 辅助方法
1. 绑定参数
sqlite3_bind_text()
2. 查询字段上的数据
sqlite3_column_text()