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