一、数据库基础概念
普通文件 vs 数据库文件
|------|-----------------|------------------------|
| 对比项 | 普通文件 | 数据库文件 (SQLite) |
| 数据操作 | 自己写代码实现增删改查,效率低 | 内置 SQL 语句,增删改查接口成熟,效率高 |
| 并发访问 | 需要自己处理加锁 | 内置锁机制,支持多进程 / 线程访问 |
| 索引 | 无索引,查找全部遍历 | 支持索引,大数据查询速度快 |
| 容错 | 程序异常容易损坏文件 | 有事务机制,保证数据安全 |
数据库分类
-
关系型数据库:以二维表格存储数据
-
大型:Oracle、DB2
-
中型:MySQL、SQL Server
-
小型嵌入式:SQLite3(文件数据库,适合嵌入式 Linux)
-
-
非关系型数据库 (NoSQL):键值对形式,结构灵活
- Redis(内存数据库)、MongoDB
SQLite3 特点
-
开源免费,纯 C 语言开发,代码量小
-
文件型数据库 :全部数据保存在一个
.db文件,可以拷贝、迁移 -
轻量,最大支持 2TB 数据,适合嵌入式设备
-
不需要独立服务进程,直接库函数调用访问
SQLite3 安装(Ubuntu)

二、SQLite3 命令行操作
打开数据库:
sqlite3 stu.db
|-------------------|---------------|
| 点命令 | 功能 |
| .help | 查看帮助 |
| .tables | 查看数据库内所有表名 |
| .headers on/off | 开启 / 关闭查询表头显示 |
| .mode column | 查询结果按列对齐显示 |
| .quit | 退出 sqlite3 终端 |
⚠️ 点命令以
.开头,不需要分号;SQL 语句必须以分号;结尾。
SQLite 支持数据类型
|-----------|--------------------|
| 类型 | 说明 |
| NULL | 空值 |
| INTEGER | 整数 |
| REAL | 浮点数 |
| TEXT | 字符串文本,用""或''包裹 |
| BLOB | 二进制原始字节数据 |
常用 SQL 语句
1.创建表
2.插入数据

3.查询数据 select

4.修改更新 update
update class1 set score=90 where id=1;
5.删除数据 delete
delete from class1 where id=1;
6.删除整张表
drop table class1;
三、SQLite3 C 语言 API(编程接口)
|--------------------------------------------------|------------------------|--------------------------------|
| 函数 | 功能 | 返回值说明 |
| sqlite3_open(filename, &ppDb) | 打开 / 创建数据库文件 | 成功返回SQLITE_OK;失败返回错误码 |
| sqlite3_errmsg(pdb) | 获取错误信息字符串 | 返回 char * 错误描述 |
| sqlite3_exec(pdb, sql, callback, arg, &errmsg) | 执行 SQL 语句(建表、增、删、改、查询) | 成功SQLITE_OK;select 查询会触发回调函数 |
| sqlite3_close(pdb) | 关闭数据库 | 成功SQLITE_OK |
回调函数原型(select 查询专用)
int callback(void *arg, int n_column, char **value, char **name);
参数说明:
-
arg:调用sqlite3_exec传入的用户参数 -
n_column:查询结果的列数 -
value[]:每一列数据,全部是字符串形式 -
name[]:每一列的表头字段名
每查到一行数据,回调函数执行一次;返回值必须为 0。
简单 C 语言代码框架
编译链接必须加
-lsqlite3
gcc main.c -o app -lsqlite3
四、重点总结
|--------------|-------------------------------------------|
| 项目 | 关键点 |
| SQLite3 存储形式 | 单个 db 文件,不需要服务进程 |
| 主键自增关键字 | INTEGER PRIMARY KEY AUTOINCREMENT |
| SQL 语句结尾 | 必须带;;点命令.开头不要分号 |
| 查询 select | 执行sqlite3_exec会循环调用 callback,一行调用一次 |
| 编译链接 | 加库 -lsqlite3 |
| 数据类型 | 存入数字、浮点,读出回调里全部为字符串 char* |
| 打开数据库 | 文件不存在就自动创建空数据库文件 |