当前位置: 首页 > 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.xdnf.cn/news/1389151.html

相关文章:

  • TF-IDF:文本分析的“火眼金睛”
  • PCIe 6.0 TLP路由机制:解密高效数据传输的核心架构
  • 【微知】如何撤销一个git的commit?以及撤销的3种方式?
  • 在本地获取下载chrome,然后离线搬运到 ECS
  • 最小生成树——Kruskal
  • go 使用rabbitMQ
  • 【谷歌浏览器】浏览器实用自用版——谷歌浏览器(Google Chrome)离线纯净版安装 官方版无任何捆绑及广告 【离线安装谷歌浏览器】
  • 通过 KafkaMQ 接入Skywalking 数据最佳实践
  • R ggplot2学习Nature子刊一张图,换数据即可用!
  • leetcode 338 比特位计数
  • 04数据库约束实战:从入门到精通
  • Linux下的网络编程SQLITE3详解
  • 算法题打卡力扣第1004. 最大连续1的个数 III(mid)
  • 技术速递|新手指南:如何在 Foundry Local 中使用自定义模型
  • 百度后端岗位--面试真题分析
  • CCS的诡异报错合集1(以C2000为例)
  • MAC spotlight 搜不到应用程序和 tags 生效
  • ZooKeeper 安装配置
  • C++基础(②VS2022创建项目)
  • 球型摄像机实现360°无死角
  • CLion 中配置运行 Qt 项目指南
  • 三一重工AI预测性维护破局:非计划停机减少60%,技师转型与数字孪生技术搅动制造业
  • 预制菜餐厅:工业化与温度餐平衡术
  • 【Rust】 5. Trait 与运算符重载
  • Python Imaging Library (PIL) 全面指南:PIL高级图像处理-分割与颜色空间转换
  • [Mysql数据库] 知识点总结6
  • 人工智能-python-深度学习-批量标准化与模型保存加载详解
  • 嵌入式-定时器的从模式控制器、PWM参数测量实验-Day24
  • 快手发布SeamlessFlow框架:完全解耦Trainer与Agent,时空复用实现无空泡的工业级RL训练!
  • OpenTenBase实战:从MySQL迁移到分布式HTAP的那些坑与收获