一、数据库基础认知
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 是专为嵌入式设备设计的轻量级关系型数据库,核心特点:
- 开源免费:遵循 GNU 协议,C 语言开发,可自由使用和修改;
- 轻量精简:核心代码仅约 1 万行,整体体积≤10M,资源占用极低;
- 免安装部署:绿色软件,无需配置服务,开箱即用;
- 文件型存储:整个数据库对应单个文件,可直接移动、备份;
- 容量上限:单库最大支持 2TB 数据,满足嵌入式场景海量数据存储需求;
- 官方地址:www.sqlite.org、www.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. 编程核心步骤
- 打开数据库:
sqlite3_open - 执行 SQL 语句:
sqlite3_exec - 关闭数据库:
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;
}