嵌入式 SQLite 数据库开发入门笔记
在嵌入式开发中,处理数据存储和管理是必不可少的环节。对于资源有限的嵌入式系统,轻量级数据库 SQLite 是一个非常适合的选择。本文将结合实践代码和概念,系统梳理 SQLite 在嵌入式中的使用方法。
一、SQLite简介
定义:SQLite 是一个轻量级的关系型数据库管理系统(RDBMS),它以文件的形式存储数据,不需要独立的数据库服务进程,直接嵌入到应用程序中即可使用。
作用:
管理海量数据,提供高效的增删改查(CRUD)操作。
适合单机、嵌入式、移动设备的轻量存储需求。
支持标准 SQL 语法,方便开发者上手。
数据组织结构(从大到小):
数据库(Database) -> 表(Table) -> 记录/行(Row) -> 字段/列(Column)
二、SQLite 命令行工具常用操作
SQLite 也提供了命令行工具用于直接操作数据库,非常适合调试和学习:
命令 | 功能 |
---|---|
.help |
显示帮助信息 |
.database |
显示当前数据库文件名 |
.table |
列出数据库中所有表 |
.header on |
打开表头显示 |
.schema 表名 |
查看表结构 |
.q |
退出 SQLite 命令行 |
SQL 常用语法:
插入数据:
INSERT INTO 表名 VALUES (值1, 值2, ...);
查询数据:
SELECT 列名 FROM 表名;
SELECT * FROM 表名 WHERE id > 10;
SELECT * FROM user WHERE name LIKE 'li%';
更新数据:
UPDATE 表名 SET 字段=值 WHERE 条件;
删除数据:
DELETE FROM 表名 WHERE 条件;
注意:
LIKE
支持%
表示任意多个字符,_
表示一个任意字符。SQL 语句末尾通常以分号
;
结尾。
三、嵌入式C语言调用 SQLite
在嵌入式开发中,我们通常通过 SQLite 提供的 C API 来操作数据库:
1. 基本流程
打开数据库
sqlite3 *db = NULL;
int ret = sqlite3_open("./aaa.db", &db);
if (ret != SQLITE_OK) {
fprintf(stderr, "sqlite3_open error: %s\n", sqlite3_errstr(ret));
sqlite3_close(db);
return 1;
}
执行 SQL 语句
char sql_cmd[] = "INSERT INTO user VALUES(11,'lisi',20);";
char *errmsg = NULL;
ret = sqlite3_exec(db, sql_cmd, NULL, NULL, &errmsg);
if (ret != SQLITE_OK) {
fprintf(stderr, "sqlite3_exec error: %s\n", errmsg);
sqlite3_free(errmsg);
sqlite3_close(db);
return 1;
}
关闭数据库
sqlite3_close(db);
2. 注意事项
sqlite3_open()
成功后一定要记得sqlite3_close()
,防止内存泄漏。sqlite3_exec()
可以执行任何 SQL 语句,如果出错,errmsg
会返回错误信息,需要手动释放。对于复杂查询,可以配合回调函数或
sqlite3_prepare_v2
来处理结果集。
四、嵌入式 SQLite 开发心得
轻量易用:SQLite 无需独立服务进程,特别适合嵌入式系统和单片机应用。
易于集成:C语言 API 简单直接,适合和嵌入式应用程序绑定。
可扩展性:虽然轻量,但支持事务、索引和多表操作,满足一般数据处理需求。
调试方便:结合命令行工具,SQL 语句可以直接测试和调试。
性能优化:在高频插入场景,可以通过事务批量提交提高效率。
五、示例场景
假设一个嵌入式设备需要管理用户信息:
建表:
CREATE TABLE user (
id INTEGER PRIMARY KEY,
name TEXT,
age INTEGER
);
C语言插入数据:
INSERT INTO user VALUES(1,'zhangsan',25);
INSERT INTO user VALUES(2,'lisi',30);
查询用户信息:
SELECT * FROM user WHERE age > 25;
通过 SQLite,嵌入式设备可以实现完整的数据管理功能,而无需复杂数据库服务支持。
六、总结
SQLite 是嵌入式数据库的首选方案,操作简单、性能适中。
掌握 C API(
sqlite3_open
、sqlite3_exec
、sqlite3_close
)即可完成大部分开发任务。结合命令行调试和事务优化,可以快速搭建可靠的数据管理模块。