YTKKeyValueStore
是一个轻量级的sqlite数据库开源库,基于FMDB封装的一个key、value的数据库, 由猿题库团队开源。适用于数据量不大的情况,进行简单的数据存储。比如配置信息,或者用户信息等。
在工作中,我用它来存储版本及组件的信息, 通过查询数据,确认ipa是否升级以及确定组件是否需要更新(RN热更新)等策略。
代码非常简单, 只有一个类 YTKKeyValueStore
数据表结构也很简单, 所有的表只有三个字段 id、json、createdTime
id用来索引一个数据项
json用来保存数据对象的json字符串
createdTime是条目插入或者更新的时间轴
实现逻辑比较简单, 支持如下功能
- 创建数据库, 可以只指定数据库文件名, 也可以指定数据库文件的路径
- 创建指定名称的表操作
- 清空表操作
- 关闭数据库
- 插入字符串, 其实是把字符串转为数组,然后存储数组的json字符串
- 获取字符串, 获取到json字符串,转为数组,返回数组第一个元素
- 插入对象, 存储对象的json字符串
- 获取对象, 获取都json字符串,转为对象
- 插入数字, 把数字封装成数组,然后存储数组的json字符串
- 获取数字, 获取到json字符串,转为数组,返回数组第一个元素
- 删除指定表名、指定id的条目
- 删除指定表名、指定id数组的多个条目
- 删除指定表明、指定前缀的id条目
- 获取一个表的所有条目, 返回数组的元素是内部的结构
YTKKeyValueItem
, 然后获取itemObject
对象, 即存入时的对象 - 获取一个表指定id的条目, 返回的元素是内部的结构
YTKKeyValueItem
, 然后获取itemObject
对象, 即存入时的对象
缺点:
- 没有支持删除整个表的功能。 比如我们创建了一些临时的表, 无法删除, 那么就会有一些脏数据表在数据库中。
我新增了这个功能:
1 | static NSString *const DROP_TABLE_SQL = @"drop table %@"; |
- 表名,貌似不支持以数字开头 写代码的时候, 默认在前面添加table前缀
番外知识点:
- 打开sqlite数据库, 命令
sqlite3 ytkstore.db
- 查看数据库内所有表, SQL命令
select name from sqlite_master where type = 'table'
- 查看表数据 , SQL命令
select * from tablename
- 如何分页查询数据 SQL命令
select * from tables order by id limit 5 offset 5;
可以自己实现这个功能。
sqltie数据库,默认会创建一个sqlite_master的表, 存储数据库的信息。 我们从中可以找到已经存在的表名。
具体实现代码 请参考github库 https://github.com/fishmwei/iOSLearnList
欢迎关注个人公众号 微信 -> 搜索 -> fishmwei,沟通交流。