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

发布于:2025-08-30 ⋅ 阅读:(20) ⋅ 点赞:(0)

数据存储方式对比

内存存储

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

持久化存储

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

数据库分类

关系型数据库
  • 以二维表格形式组织数据
  • 代表产品:
    • 大型: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内容

数据存储方式对比

内存存储

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

持久化存储

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


网站公告

今日签到

点亮在社区的每一天
去签到