《Linux 网络编程六:数据存储与SQLite应用指南》
本文对比了内存存储与持久化存储的特点,重点介绍了SQLite数据库的应用。内存存储速度快但数据易失,持久化存储速度慢但数据可长期保存。SQLite作为轻量级文件数据库,具有开源免费、跨平台、单文件存储等特点,支持最大2TB数据。文章详细说明了SQLite的安装配置、数据类型、常用SQL命令和高级功能,并介绍了C/C++ API接口的使用方法,包括数据库操作和回调函数处理。SQLite适用于需要嵌入
·
数据存储方式对比
内存存储
- 变量、数组、数据结构:数据在程序运行结束或掉电后丢失
- 特点:高速访问,临时性存储
持久化存储
- 文件、数据库:数据在掉电或程序结束后保留
- 特点:低速访问,长期保存
数据库分类
关系型数据库
- 以二维表格形式组织数据
- 代表产品:
- 大型: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内容
数据存储方式对比
内存存储
- 变量、数组、数据结构:数据在程序运行结束或掉电后丢失
- 特点:高速访问,临时性存储
持久化存储
- 文件、数据库:数据在掉电或程序结束后保留
- 特点:低速访问,长期保存
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)