iOS本地持久化存储方式
- NSUserDefaults:存储配置信息,适用小规模数据。NSUserDefaults的底层实现是以.plist文件进行存储的
- SQLite:轻量级的关系型数据库,存储查询需求较多的数据。但是原生的SQLite API使用极为不便。通常使用封装了SQLite API的FMDB库
- Core Data
- KeyChain:用于存储一些私密信息,也用于应用之间数据共享。KeyChain里存储的信息不会因为App被删除而丢失。
数据库
数据库(database)是按照数据结构来组织,存储和管理数据的仓库。
大体上分为两种类型:
- 关系型数据库:又分为PC端和嵌入式\移动端。
- 对象型数据库
来看一些基本概念:
Data -> DataBase -> DataBaseManageSystem -> DataBaseSystem
- Data:数据库存储的基本对象
- DataBase:一个以某种有组织的方式存储的数据集合
- DataBaseManageSystem:数据库管理系统是位于用户和操作系统之间的一层数据管理软件。移动端用的DBMS是SQLite3
- DataBaseSystem:引入数据库系统后的系统,由数据库+数据库管理系统+应用系统+数据库管理成员(DBA)构成。一般情况称DataBaseSystem为数据库。注意与DataBase区分开来。
SQLite基本操作
创建数据库连接
sqlite3_open()将创建一个新的数据库文件,如果成功创建的话,将返回db指针
创建一张表格
sqlite3_prepare_v2将SQL语句编译成字节代码,并返回状态码。
sqlite3_step运行编译语句
sqlite3_finalize删除编译语句,并避免资源泄漏
插入操作
看到insertStatementString的两个问号,?其实相当于占位符。
sqlite3_bind_Int()的三个参数,第一个参数表示需要绑定的语句,第二个参数是一个非零的索引号,表示你要将语句绑定的位置,第三个参数表示值本身。
那么一次怎么插入多行呢?
调用sqlite3_reset()方法,将编译语句重置为初始值。
查询操作
需要将queryResultCol的值转换成Swift类型的字符串
但是现在打印出的只有一行:1 | Ray
怎么将所有行都打印出来呢?使用While loop
更新操作
删除操作
处理错误
用sqlite3_errmsg()从数据库中得到错误信息。
关闭数据库连接
关于用Swift封装C API,以及SQLite.swift,我以后会补充。
参考博客:
理一下iOS本地持久化储存(侧重数据库SQLite)
SQLite Tutorial