0%

YTKKeyValueStore开源库使用

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
static NSString *const DROP_TABLE_SQL = @"drop table %@";


- (void)dropTable:(NSString *)tableName {
if ([YTKKeyValueStore checkTableName:tableName] == NO) {
return;
}

NSString * sql = [NSString stringWithFormat:DROP_TABLE_SQL, tableName];
__block BOOL result;
[_dbQueue inDatabase:^(FMDatabase *db) {
result = [db executeUpdate:sql];
}];
if (!result) {
debugLog(@"ERROR, failed to drop table: %@", tableName);
}
}

  • 表名,貌似不支持以数字开头 写代码的时候, 默认在前面添加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,沟通交流。