嵌入式第四十三篇——数据库

一、数据库基础认知

1. 数据存储逻辑

数据库(库)→ 数据表(表):由行(记录)和列(字段)组成 → 记录(行):单条数据 → 字段(列):数据属性

2. 数据库分类(按规模)

规模 代表产品 类型
大型 ORACLE、DB2 关系型数据库
中型 MySQL、MS SQL Server 关系型数据库
小型 SQLite、powdb 关系型数据库

3. 核心名词解释

缩写 / 名词 全称 / 含义
DB Database(数据库):存储数据的集合,支持增删改查、统计等操作
DBMS Database Management System(数据库管理系统):管理数据库的软件
MIS Management Information System(管理信息系统):基于数据库的业务管理系统
OA Office Automation(办公自动化):基于数据库的办公流程系统

二、嵌入式数据库 SQLite3 核心特性

SQLite3 是专为嵌入式设备设计的轻量级关系型数据库,核心特点:

  1. 开源免费:遵循 GNU 协议,C 语言开发,可自由使用和修改;
  2. 轻量精简:核心代码仅约 1 万行,整体体积≤10M,资源占用极低;
  3. 免安装部署:绿色软件,无需配置服务,开箱即用;
  4. 文件型存储:整个数据库对应单个文件,可直接移动、备份;
  5. 容量上限:单库最大支持 2TB 数据,满足嵌入式场景海量数据存储需求;
  6. 官方地址:www.sqlite.orgwww.kernel.org(内核级支持)。

三、SQLite3 安装与编译(Linux 环境)

1. 安装依赖

复制代码
# 安装sqlite3客户端
sudo apt-get install sqlite3
# 安装开发库(编译C程序需要)
sudo apt-get install libsqlite3-dev

2. 编译 C 语言程序

复制代码
# 编译包含sqlite3的C代码(test.c为源码文件),-lsqlite3链接数据库库
gcc test.c -lsqlite3 -o sqlite_demo
# 运行程序
./sqlite_demo

四、SQLite3 常用终端指令

sqlite3 数据库文件.db进入终端后,可执行以下指令(指令无需分号结尾,SQL 语句需分号):

指令 功能说明
.database 查看当前数据库关联的物理文件
.table 列出数据库中所有数据表
.schema 显示表的创建语句(建表语法)
.q/.quit/.exit 退出 sqlite3 终端
.header on 查询时显示字段名(表头)

五、核心 SQL 语句(需分号结尾)

user表(id int, name char, age int)为例:

1. 表管理

复制代码
-- 创建表
create table user(id int, name char, age int);
-- 删除表
drop table user;

2. 数据操作(增删改查)

复制代码
-- 插入数据
insert into user values(3, "wang", 11);
-- 查询数据(年龄>20 或 <50)
select * from user where age>20 or age<50;
-- 修改数据(姓名为li的记录,id改为1)
update user set id = 1 where name = 'li';
-- 删除数据(id为1 或 2的记录)
delete from user where id = 1 or id = 2;

六、SQLite3 C 语言编程示例(核心流程)

1. 编程核心步骤

  1. 打开数据库:sqlite3_open
  2. 执行 SQL 语句:sqlite3_exec
  3. 关闭数据库:sqlite3_close

2. 完整示例代码

复制代码
#include <stdio.h>
#include <sqlite3.h>

int main(int argc, char** argv)
{
    // 1. 定义数据库句柄(核心对象)
    sqlite3* db = NULL;
    // 2. 打开数据库(不存在则自动创建123.db文件)
    int ret = sqlite3_open("123.db", &db);
    if (ret != SQLITE_OK)
    {
        // 打印错误信息
        fprintf(stderr, "打开数据库失败:%s\n", sqlite3_errmsg(db));
        sqlite3_close(db); // 失败也要关闭句柄
        return 1;
    }

    // 3. 定义要执行的SQL语句(插入数据)
    char* errmsg = NULL; // 存储执行错误信息
    char sql_cmd[512] = "insert into user values(6,'lvbu',31);";
    // 执行SQL语句(回调函数设为NULL,无返回数据处理)
    ret = sqlite3_exec(db, sql_cmd, NULL, NULL, &errmsg);
    if (ret != SQLITE_OK)
    {
        fprintf(stderr, "执行SQL失败:%s\n", errmsg);
        sqlite3_free(errmsg); // 释放错误信息内存
        sqlite3_close(db);
        return 1;
    }

    // 4. 关闭数据库
    sqlite3_close(db);
    printf("数据插入成功!\n");
    return 0;
}
相关推荐
JiaWen技术圈1 分钟前
内核子系统 nf_tables 深度解析
linux·服务器·安全·运维开发
zhoutongsheng2 分钟前
如何解决ORA-01078参数文件错误_pfile与spfile互相创建恢复
jvm·数据库·python
m0_716255004 分钟前
批处理一道例题+答案解析+批处理知识点总结 | 批处理高频易错场景 + 正确写法对照表
数据库·oracle
计算机安禾6 分钟前
【Linux从入门到精通】第32篇:Nginx入门——高性能Web服务器搭建
linux·服务器·nginx
2401_824222696 分钟前
HTML怎么标注字数限制提示_HTML实时字数统计占位【详解】
jvm·数据库·python
d111111111d10 分钟前
了解Modbus
网络·笔记·stm32·单片机·嵌入式硬件·学习
ZenosDoron16 分钟前
Linux 中,rm -r 和 -f
linux·运维·服务器
Hello.Reader20 分钟前
Ubuntu 上正确安装 Kali 虚拟机、Docker 与 kail 工具指南
linux·ubuntu·docker
稀饭过霍21 分钟前
数据类型【TINYINT、SMALLINT、INT、BIGINT、decimal(18,2)】表示意思
数据库
charlie11451419123 分钟前
通用GUI编程技术——图形渲染实战(三十八)——顶点缓冲与输入布局:GPU的第一个三角形
开发语言·c++·学习·图形渲染·win32