概述

既然有了扩展内存的存在,代表着单片机可以处理较大的数据,因此很多应用就会牵扯到数据库相应的应用。

既然串口屏接入了互联网,因此数据库的处理就得提上日程,比如以下应用:

数据集的详细描述

数据集实际上可以理解为数据库的一个检索结果,这里的数据库可以理解为跑在互联网服务器上的SQL数据库,通过一个select语句获取一个有限数据条目的数据集,这个数据集可以传入ESP32进行处理;

当然,您也可以理解为在ESP32中构建一个类似excel二维表一样的存储结构;也可以理解为使用struct数据结构数组构建的多条数据体系;

数据集分为物理表和逻辑表两个层面,其中:

因此遍历数据时,先要弄清楚遍历的是物理表还是逻辑表;遍历物理表会遍历到已经删除的数据;而遍历逻辑表则不会遍历到被删除的语句;

为更好的理解物理表和逻辑表,下面以《学生档案》举例描述:

《学生档案》数据集基本信息:
物理表:
存储地址 pid 数据状态 姓名 年龄 入学分数
0x0000 0 正常 张三 18 569
0x0020 1 删除 李四 19 582
0x0040 2 正常 王五 18 620
0x0060 3 删除 赵二 19 612
0x0080 4 正常 孙武 21 605

物理表的数据主要标识为pid,pid是以0开始的整数,顺序排列且不可变化,因此物理表遍历:

int pid;
int count;
count=db_getinfo(0,1);  //获取0号数据集的物理表数量
for (pid=0;pid<count;pid++){
    //遍历
    db_get(0,pid);  //获取pid号数据
    //... 处理本条数据
}
逻辑表

逻辑表实际上是一个索引,逻辑表支持排序,实际上是物理表按字段排序的结果(下表是按照入学分数从高到低排序):

lid pid 存储地址 数据状态 姓名 年龄 入学分数
0 2 0x0040 正常 王五 18 620
1 4 0x0080 正常 孙武 21 605
2 0 0x0000 正常 张三 18 569

逻辑表的遍历:

int lid;
int pid;
int count;
count=db_getinfo(0,0);  //获取0号数据集的逻辑表数量
for (lid=0;lid<count;lid++){
    //遍历
    pid=dblist_get(0,lid);  //获取逻辑表id对应的物理表pid
    db_get(0,pid);  //获取pid号数据
    //... 处理本条数据
}

专项讲解