当前位置: 首页 > news >正文

《Linux 网络编程六:数据存储与SQLite应用指南》

数据存储方式对比

内存存储

  • 变量、数组、数据结构:数据在程序运行结束或掉电后丢失
  • 特点:高速访问,临时性存储

持久化存储

  • 文件、数据库:数据在掉电或程序结束后保留
  • 特点:低速访问,长期保存

数据库分类

关系型数据库
  • 以二维表格形式组织数据
  • 代表产品:
    • 大型:Oracle、DB2
    • 中型:MySQL、SQL Server
    • 小型:SQLite
非关系型数据库
  • 以键值对或JSON格式存储,结构灵活
  • 代表产品:Redis、MongoDB

SQLite数据库特性

  1. 开源免费:C语言开发,代码量约1万行,体积小于10MB
  2. 文件型数据库:单文件存储,支持跨平台移植
  3. 容量限制:最大支持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接口

  1. 打开数据库

    int sqlite3_open(const char *filename, sqlite3 **ppDb);  
    

    • 参数:filename为数据库路径,ppDb为句柄指针地址
    • 返回值:成功返回SQLITE_OK
  2. 关闭数据库

    int sqlite3_close(sqlite3 *db);  
    

  3. 执行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内容

数据存储方式对比

内存存储

  • 变量、数组、数据结构:数据在程序运行结束或掉电后丢失
  • 特点:高速访问,临时性存储

持久化存储

  • 文件、数据库:数据在掉电或程序结束后保留
  • 特点:低速访问,长期保存

http://www.dtcms.com/a/356425.html

相关文章:

  • LabVIEW转速仪校准系统
  • uniapp跨平台开发---uni.request返回int数字过长精度丢失
  • uni-app + Vue3 开发H5 页面播放海康ws(Websocket协议)的视频流
  • 学习:uniapp全栈微信小程序vue3后台(6)
  • Uniapp + UView + FastAdmin 性格测试小程序方案
  • 2025最新uni-app横屏适配方案:微信小程序全平台兼容实战
  • 项目一系列-第9章 集成AI千帆大模型
  • 实现自己的AI视频监控系统-第二章-AI分析模块5(重点)
  • js AbortController 实现中断接口请求
  • 【MFC教程】C++基础:01 小黑框跑起来
  • 【MFC应用创建后核心文件详解】项目名.cpp、项目名.h、项目名Dlg.cpp 和 项目名Dlg.h 的区别与作用
  • Java项目打包成EXE全攻略
  • Kafka 副本同步异常与 ISR 收缩故障排查实录
  • C语言————操作符详解
  • 《华为战略管理法:DSTE 实战体系》读书笔记
  • 【完整源码+数据集+部署教程】骨折检测系统源码和数据集:改进yolo11-EfficientHead
  • 【微信小程序】微信小程序基于双token的API请求封装与无感刷新实现方案
  • 华为无线AC主备配置案例
  • KNN算法详解:鸢尾花识别和手写数字识别
  • mysql安全运维之常见攻击类型与防御指南-从SQL注入到权限提升
  • .Net应用程序和SqlServer数据库使用tls加密会话过程
  • DMZ层Nginx TLS 终止与安全接入配置实战20250829
  • C5仅支持20MHZ带宽,如果路由器5Gwifi处于40MHZ带宽信道时,会出现配网失败
  • Git 合并冲突
  • 【网络】snat/MASQUERADE作用和应用场景
  • 【混合开发】Android+WebView视频图片播放硬件加速详解
  • 网页提示UI操作-适应提示,警告,信息——仙盟创梦IDE
  • 嵌入式学习 day61 DHT11、I2C
  • 项目一系列-第8章 性能优化Redis基础
  • Python OpenCV图像处理与深度学习