• 【树莓派不吃灰】搭建sqlite3数据库环境


    在这里插入图片描述

    • ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️
    • ❤️ 本篇创建记录 2022-11-08 ❤️
    • ❤️ 本篇更新记录 2022-11-08 ❤️
    • 🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言 📝
    • 🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请留言轰炸哦!及时修正!感谢支持!
    • 🔥 Arduino ESP8266教程累计帮助过超过1W+同学入门学习硬件网络编程,入选过选修课程,刊登过无线电杂志🔥

    1. 前言

    说到数据库,一般人肯定会想到MySQL。

    但是MySQL占用内存太大,部署在嵌入式设备中不一定是一个明智的选择。

    SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置

    就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。

    1.1 SQLite 官方说明

    SQLite官网:https://www.sqlite.org/index.html
    在这里插入图片描述
    大概意思就是:

    • SQLite是一个C语言库,它实现了一个小型、快速、自包含、高可靠性、全功能的SQL数据库引擎。SQLite是世界上使用最多的数据库引擎。SQLite内置于几乎所有的移动电话和大多数计算机中,并捆绑在人们每天使用的无数其他应用程序中。
    • SQLite文件格式是稳定的、跨平台的、向后兼容的,开发人员保证至少在2050年以前保持这种格式。SQLite数据库文件通常用作在系统之间传输丰富内容的容器,并作为数据的长期存档格式。目前有超过1万亿(1 trillion)个SQLite数据库在使用中。
    • SQLite源代码在公共域中,每个人都可以自由使用。

    1.2 为什么要用 SQLite?

    • 不需要一个单独的服务器进程或操作的系统(无服务器的)
    • SQLite 不需要配置,这意味着不需要安装或管理
    • 一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件
    • SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB
    • SQLite 是自给自足的,这意味着不需要任何外部的依赖
    • SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问
    • SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能
    • SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API
    • SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行

    基于以上特点,非常适合在树莓派和其他嵌入式系统中使用。

    2. 搭建sqlite环境

    2.1 安装sqlite3

    首先输入命令:

    sudo apt-get update
    sudo apt-get install sqlite3

    在这里插入图片描述
    再次输入命令:

    sqlite3 -version

    在这里插入图片描述
    当前版本是 3.34.1版本。

    2.2 创建或者打开数据库文件

    SQLite是以文件形式存在,一个数据库就是一个文件(db文件)。

    • 创建一个数据库存放目录

    mkdir sqlite3
    在这里插入图片描述

    • 创建或者打开数据库文件 dpjcn.db
    • sqlite3 dpjcn.db
      在这里插入图片描述

    在当前目录sqlite3下创建一个数据库文件dpjcn.db,同时挂载到SQLite3上,该文件将被 SQLite 引擎用作数据库

    如果dpjcn.db已存在就打开并挂载这个文件。

    这时候我们就可以使用sqlite对应的一些命令了。

    2.3 创建表 —— create table语句

    在我们的智能家居系统中有一些温度传感器,我们将这些温度传感器的数据存在这张表中。

    • 创建表
    create table temperature(
    id INTEGER PRIMARY KEY,
    deviceid varchar(20) default '0',
    time varchar(20) default '0',
    battery_voltage int default 0,
    celsius_temp real default 0
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    • 查表temperature的结构

    .schema temperature
    在这里插入图片描述
    总共有5个字段:

    • id 自增
    • deviceid 设备id,字符型
    • time 时间,字符型
    • battery_voltage 电量,int型,默认值0
    • celsius_temp 温度,浮点型,默认值0

    2.4 插入数据 —— insert 语句

    直接输入:

    insert into temperature (deviceid, time, battery_voltage, celsius_temp) values('temp001', '2020-07-28 17:25:35', 3451, 26.75);
    insert into temperature (deviceid, time, battery_voltage, celsius_temp) values('temp001', '2020-07-28 17:25:45', 3454, 25.50);
    insert into temperature (deviceid, time, battery_voltage, celsius_temp) values('temp001', '2020-07-28 17:25:55', 3453, 24.35);
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    2.5 查询数据 —— select 语句

    • 查询所有记录
      在这里插入图片描述
    • 查询id = 2的记录
      在这里插入图片描述
    • 查询deviceid = temp001的第一条记录
      在这里插入图片描述

    2.6 修改数据 —— update 语句

    查询id = 2的记录,将温度从25.5改成25.65
    在这里插入图片描述

    2.7 删除数据 —— delete 语句

    • 删除id = 2的记录
      在这里插入图片描述
    • 删除所有记录
      在这里插入图片描述

    2.8 删除表 —— drop table 语句

    在这里插入图片描述

    2.9 退出SQLite —— .quit

    在这里插入图片描述

    3. 导出完整的数据库到文本文件sql —— .dump命令

    可以在命令提示符中使用 SQLite .dump 点命令来导出完整的数据库在一个文本文件中,如下所示:
    在这里插入图片描述

    PRAGMA foreign_keys=OFF;
    BEGIN TRANSACTION;
    CREATE TABLE temperature(
    id INTEGER PRIMARY KEY,
    deviceid varchar(20) default '0',
    time varchar(20) default '0',
    battery_voltage int default 0,
    celsius_temp real default 0
    );
    INSERT INTO temperature VALUES(1,'temp001','2020-07-28 17:25:35',3451,26.749999999999998223);
    INSERT INTO temperature VALUES(2,'temp001','2020-07-28 17:25:45',3454,25.499999999999998223);
    INSERT INTO temperature VALUES(3,'temp001','2020-07-28 17:25:55',3453,24.350000000000000532);
    COMMIT;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    这里就是一个sql执行语句,很多情况下我们可以在本地写好这个语句文件,然后直接导入到sqlite里面执行,不需要自己一个个字符输入。

    4. 通过sql文件创建数据表和插入数据

    • 删除表
      drop table temperature;

    • 通过简单的方式从生成的 dpjcn.sql 恢复
      sqlite3 dpjcn.db < dpjcn.sql
      在这里插入图片描述

    通过这种sql文件的方式,我们可以把我们本地的数据直接复制一份给到其他设备。比如创建一个dpjcn.sh脚本:

    #!/bin/sh
    
    DBNAME="dpjcn.db"
    
    rm -f $DBNAME
    
    echo 开始插入数据
    
    sqlite3 $DBNAME < dpjcn.sql
    
    echo 插入完成
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    注意:

    chmod a+x dpjcn.sh增加可执行权限

    在这里插入图片描述
    直接执行脚本试试。
    在这里插入图片描述

    5. 总结

    sqlite非常适合在树莓派和其他嵌入式系统中使用,对于我们学习来说还是有必要学习一番,最好是结合sqlite语法来操作学习,后续结合服务器开发使用。

  • 相关阅读:
    Linux 查看 CPU核数 及 内存
    【ONE·Linux || 网络基础(一)】
    ThreadLocal会用可不够
    CSS笔记(黑马程序员pink老师前端)CSS初始化
    sqlyon连接mysql碰到的问题及mysql卸载须注意的地方
    电脑如何设置开机密码?详细教程来了
    SWUST OJ#541 排列的字典序问题
    不写代码、构建一个开源的 ChatGPT,总共需要几步?|Hugging News #1020
    智能仓储立库核心干货|立体化立体仓库类型是如何进行叉车和堆垛机配置?
    【回归预测-LSTM预测】基于灰狼算法优化LSTM实现数据回归预测附Matlab代码
  • 原文地址:https://blog.csdn.net/weixin_44614230/article/details/127725864