概述
既然有了扩展内存的存在,代表着单片机可以处理较大的数据,因此很多应用就会牵扯到数据库相应的应用。
既然串口屏接入了互联网,因此数据库的处理就得提上日程,比如以下应用:
- 无纸数据记录仪记录的数据转存到服务器
- 测试仪器的测试记录转存到服务器
- 建立的工作记录存储到服务器
- 服务器中获取的非固定设备列表转存到屏端进行通信操作
- 比如:点菜系统的后台操作界面
- 拿药系统中的订单列表和药物列表操作
- ......
数据集的详细描述
数据集实际上可以理解为数据库的一个检索结果,这里的数据库可以理解为跑在互联网服务器上的SQL数据库,通过一个select语句获取一个有限数据条目的数据集,这个数据集可以传入ESP32进行处理;
当然,您也可以理解为在ESP32中构建一个类似excel二维表一样的存储结构;也可以理解为使用struct数据结构数组构建的多条数据体系;
数据集分为物理表和逻辑表两个层面,其中:
- 物理表是数据按实际存储位置编号的数据列表,任意修改都不会修改该数据在内存中的存储位置
- 逻辑表是一个索引,由物理表去除删除的数据,并经过排序形成的一个列表;一般的应用都是针对逻辑表进行处理的,因为逻辑表不含被删除的数据;
因此遍历数据时,先要弄清楚遍历的是物理表还是逻辑表;遍历物理表会遍历到已经删除的数据;而遍历逻辑表则不会遍历到被删除的语句;
为更好的理解物理表和逻辑表,下面以《学生档案》举例描述:
《学生档案》数据集基本信息:
- 最大存储数据256条(物理表限制条数)
- 物理表数量:5
- 逻辑表数量: 3
- 每条数据存储长度:0x20;
物理表:
存储地址 | 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:物理表位置
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号数据
//... 处理本条数据
}