数据存储方式对比
内存存储
- 变量、数组、数据结构:数据在程序运行结束或掉电后丢失
- 特点:高速访问,临时性存储
持久化存储
- 文件、数据库:数据在掉电或程序结束后保留
- 特点:低速访问,长期保存
数据库分类
关系型数据库
- 以二维表格形式组织数据
- 代表产品:
- 大型:Oracle、DB2
- 中型:MySQL、SQL Server
- 小型:SQLite
非关系型数据库
- 以键值对或JSON格式存储,结构灵活
- 代表产品:Redis、MongoDB
SQLite数据库特性
- 开源免费:C语言开发,代码量约1万行,体积小于10MB
- 文件型数据库:单文件存储,支持跨平台移植
- 容量限制:最大支持2TB数据
SQLite安装与配置
# 安装SQLite3及开发库
sudo apt-get install sqlite3 libsqlite3-dev
# 创建数据库文件
sqlite3 example.db
SQLite数据类型
NULL
:空值INTEGER
:整型REAL
:浮点型TEXT
:字符串BLOB
:二进制数据
SQLite常用命令
元命令(需以
.
开头):.help
:查看帮助.tables
:列出所有表.headers on/off
:显示/隐藏表头.mode column
:设置列对齐.quit
:退出
SQL语句(需以
;
结尾):- 创建表:
CREATE TABLE 表名 (列1 数据类型, 列2 数据类型);
- 插入数据:
INSERT INTO 表名 VALUES (值1, 值2);
- 查询数据:
- 全列查询:
SELECT * FROM 表名;
- 条件查询:
SELECT * FROM 表名 WHERE 列名 > 值;
- 模糊匹配:
SELECT * FROM 表名 WHERE 列名 LIKE "%关键词"; -- 多字符匹配 SELECT * FROM 表名 WHERE 列名 LIKE "_关键词"; -- 单字符匹配
- 排序:
SELECT * FROM 表名 ORDER BY 列名 ASC; -- 升序 SELECT * FROM 表名 ORDER BY 列名 DESC; -- 降序
- 全列查询:
- 删除数据:
DELETE FROM 表名 WHERE 条件;
- 更新数据:
UPDATE 表名 SET 列=新值 WHERE 条件;
- 删除表:
DROP TABLE 表名;
- 创建表:
高级功能
- 自增主键:
CREATE TABLE 表名 (id INTEGER PRIMARY KEY AUTOINCREMENT, ...); INSERT INTO 表名 VALUES (NULL, ...); -- 自动填充主键
- 时间函数:
SELECT date("now"); -- 当前日期 SELECT datetime("now", "+8 hours"); -- 当前时间(含时区)
SQLite可视化工具
sudo apt-get install sqlitebrowser
sqlitebrowser example.db
C/C++ API接口
打开数据库:
int sqlite3_open(const char *filename, sqlite3 **ppDb);
- 参数:
filename
为数据库路径,ppDb
为句柄指针地址 - 返回值:成功返回
SQLITE_OK
- 参数:
关闭数据库:
int sqlite3_close(sqlite3 *db);
执行SQL语句:
int sqlite3_exec( sqlite3 *db, // 数据库句柄 const char *sql, // SQL语句 int (*callback)(void*, int, char**, char**), // 回调函数 void *arg, // 回调参数 char **errmsg // 错误信息指针 );
- 回调函数:
int callback(void *arg, int column_count, char **column_values, char **column_names);
- 每次查询到数据时触发,
column_values
为列值数组,column_names
为列名数组
- 每次查询到数据时触发,
- 回调函数:
注意事项
- 查询结果均为字符串类型,需手动转换
- 回调函数触发次数等于查询到的数据行数
- 错误处理需检查
errmsg
内容
数据存储方式对比
内存存储
- 变量、数组、数据结构:数据在程序运行结束或掉电后丢失
- 特点:高速访问,临时性存储
持久化存储
- 文件、数据库:数据在掉电或程序结束后保留
- 特点:低速访问,长期保存