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

一、数据库基础认知

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;
}
相关推荐
默默开发17 分钟前
完整版:本地电脑 + WiFi 搭建 AI 自动炒股 + 自我学习系统
人工智能·学习·电脑
for_ever_love__19 分钟前
Objective-C学习 NSSet 和 NSMutableSet 功能详解
开发语言·学习·ios·objective-c
haixingtianxinghai21 分钟前
Redis的定期删除和惰性删除
数据库·redis·缓存
资深web全栈开发22 分钟前
PostgreSQL Schema 最佳实践:架构师的命名与组织艺术
数据库·postgresql
sdm0704271 小时前
yum和开发工具vim/gcc
linux·服务器·centos
麦聪聊数据1 小时前
利用实时数据管道与 SQL2API 重构企业自动化审计架构
数据库·sql·低代码
麦聪聊数据1 小时前
重构开放生态:利用 QuickAPI 跨越遗留系统与敏捷交付的工程实践
数据库·sql·低代码·restful
百结2146 小时前
Mysql数据库操作
数据库·mysql·oracle
keep one's resolveY6 小时前
时区问题解决
数据库
Leinwin6 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库