SQLite3 数据库

一、数据库基础认知

1. 数据库核心价值

数据库是 "数据的仓库",即使面对海量数据,也能实现:

  • 安全存储数据;
  • 高效的统计分析;
  • 数据的增删改查(CRUD)管理。嵌入式设备中引入数据库,可解决传统文件存储数据混乱、查询效率低的问题。

2. 数据库核心结构

plaintext

复制代码
库 → 表(行、列) → 记录(行) → 字段(列)
  • 库:数据的容器,一个数据库可包含多张表;
  • 表:数据的组织单元,由行(记录)和列(字段)组成;
  • 记录:一行数据,代表一个完整的实体信息;
  • 字段:一列数据,代表实体的某个属性(如 id、name)。

3. 数据库分类与常见名词

(1)数据库分类(按规模)
规模 代表产品 适用场景
大型 ORACLE、DB2 企业级核心业务、海量数据存储
中型 MySQL、MSSQL 中小型系统、互联网应用
小型 SQLite3、powdb 嵌入式设备、轻量级应用
(2)核心名词
  • DB:数据库(Database),存储数据的集合;
  • DBMS:数据库管理系统(Database Management System),管理数据库的软件(如 SQLite3);
  • MIS:管理信息系统(Management Information System),基于数据库的业务管理系统;
  • OA:办公自动化(Office Automation),数据库驱动的办公系统。

二、嵌入式首选:SQLite3 核心特性

SQLite3 是遵循 GNU 开源协议的嵌入式关系型数据库,由 C 语言开发,专为轻量级场景设计,核心特点如下:

  1. 极致轻量:核心代码仅 1 万行左右,安装包总大小 10M 以内,适配资源受限的嵌入式设备;
  2. 无需安装:绿色软件,无需配置服务、无需依赖第三方库,开箱即用;
  3. 文件型数据库:数据存储在单一文件中,可直接移动、拷贝,部署便捷;
  4. 容量上限高:单数据库文件最大支持 2TB,满足嵌入式场景的海量数据需求;
  5. 跨平台:支持 Linux、Windows、嵌入式系统(如 RTOS)等多平台。

三、SQLite3 安装与环境配置(Linux)

1. 安装核心包

bash

运行

复制代码
# 安装sqlite3命令行工具
sudo apt-get install sqlite3
# 安装开发库(用于C语言编程)
sudo apt-get install libsqlite3-dev

2. 编译 C 语言程序

编写 SQLite3 程序后,编译时需链接sqlite3库:

bash

运行

复制代码
gcc test.c -lsqlite3 -o test

四、SQLite3 常用指令与 SQL 语句

1. 核心指令(终端交互)

启动 SQLite3:sqlite3 数据库名.db(若数据库不存在则自动创建)。

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

2. 核心 SQL 语句(必须以分号结尾)

(1)创建表

sql

复制代码
create table user(id int, name char, age int);
(2)删除表

sql

复制代码
drop table user;
(3)插入数据

sql

复制代码
insert into user values(3,"wang",11);
(4)查询数据

sql

复制代码
-- 查询age大于20或小于50的所有记录
select * from user where age>20 or age<50;
(5)修改数据

sql

复制代码
-- 将name为'li'的记录的id改为1
update user set id = 1 where name = 'li';
(6)删除数据

sql

复制代码
-- 删除id为1或2的记录
delete from user where id = 1 or id = 2;

五、C 语言操作 SQLite3 实战

SQLite3 提供简洁的 C 语言 API,核心流程为:打开数据库 → 执行 SQL 语句 → 关闭数据库

1. 核心 API 说明

函数 功能
sqlite3_open() 打开 / 创建数据库,返回数据库句柄
sqlite3_exec() 执行 SQL 语句(增删改查)
sqlite3_close() 关闭数据库句柄
sqlite3_errmsg() 获取错误信息
sqlite3_free() 释放错误信息内存

2. 完整示例:插入数据到数据库

c

运行

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

int main(int argc, char** argv)
{
    // 数据库句柄
    sqlite3* db = NULL;
    // 打开/创建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;
    }

    // 定义要执行的SQL语句
    char* errmsg = NULL;
    char sql_cmd[512] = "insert into user values(6,'lvbu',31);";
    // 执行SQL语句
    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;
    }

    printf("数据插入成功!\n");
    // 关闭数据库
    sqlite3_close(db);
    return 0;
}

3. 代码说明

  • sqlite3_open:第一个参数为数据库文件名,第二个参数为输出型参数,返回数据库句柄;
  • sqlite3_exec:第二个参数为要执行的 SQL 语句,最后一个参数接收错误信息;
  • 错误处理:执行失败时需通过sqlite3_errmsg获取详情,且errmsg需手动释放内存;
  • 收尾:无论执行成功与否,都需调用sqlite3_close关闭数据库句柄,避免资源泄漏。

六、嵌入式场景应用建议

  1. 数据存储优化:嵌入式设备中建议将数据库文件存储在 Flash/SD 卡中,避免频繁写入内存;
  2. SQL 语句简化:嵌入式场景优先使用简单 SQL 语句,减少数据库运算开销;
  3. 错误处理强化:嵌入式设备无交互界面,需将数据库操作错误日志写入本地文件,方便调试;
  4. 并发控制 :SQLite3 默认支持单线程,多线程场景需加锁或使用sqlite3_threadsafe()配置线程安全。

七、总结

SQLite3 以轻量、易用、跨平台的特性,成为嵌入式开发中数据管理的最优解。掌握其基础指令、SQL 语句及 C 语言编程接口,可快速实现嵌入式设备的海量数据存储与管理。无论是智能家居、工业控制还是物联网设备,SQLite3 都能以极小的资源开销,满足数据增删改查的核心需求。

相关推荐
不吃橘子的橘猫2 小时前
NVIDIA DLI 《Build a Deep Research Agent》学习笔记
开发语言·数据库·笔记·python·学习·算法·ai
程序 代码狂人2 小时前
DML,DDL,DCL,TCL
数据库
qinyia2 小时前
WisdomSSH解决MySQL频繁重启问题
数据库·mysql
松涛和鸣3 小时前
DAY42 SQLite3 : Dictionary Import and Data Query Implementation with C Language
linux·c语言·数据库·单片机·网络协议·sqlite
ptc学习者3 小时前
mysql 主从配置
数据库
飞天小蜈蚣3 小时前
django的模板渲染、for循环标签、继承模板
数据库·python·django
杨云龙UP3 小时前
SQL Server 2016通过SSMS(SQL Server Management Studio)图形界面完成创建用户和授权_20251230
运维·服务器·数据库
源代码•宸3 小时前
goframe框架签到系统项目开发(每日签到添加积分和积分记录、获取当月最大连续签到天数、发放连续签到奖励积分、实现签到日历详情接口)
数据库·经验分享·redis·中间件·golang·dao·goframe
YMatrix 官方技术社区4 小时前
时序 + 分析:YMatrix “智慧工厂“数据平台双方案详解
数据库·物联网·时序数据库·智能制造·数智工厂·ymatrix