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

数据存储方式对比

内存存储

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

持久化存储

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

数据库分类

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

SQLite数据库特性

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

    • 创建表:

      sql 复制代码
      CREATE TABLE 表名 (列1 数据类型, 列2 数据类型);
    • 插入数据:

      sql 复制代码
      INSERT INTO 表名 VALUES (值1, 值2);
    • 查询数据:

      • 全列查询:SELECT * FROM 表名;

      • 条件查询:SELECT * FROM 表名 WHERE 列名 > 值;

      • 模糊匹配:

        sql 复制代码
        SELECT * FROM 表名 WHERE 列名 LIKE "%关键词";  -- 多字符匹配  
        SELECT * FROM 表名 WHERE 列名 LIKE "_关键词";  -- 单字符匹配  
      • 排序:

        sql 复制代码
        SELECT * FROM 表名 ORDER BY 列名 ASC;  -- 升序  
        SELECT * FROM 表名 ORDER BY 列名 DESC; -- 降序  
    • 删除数据:DELETE FROM 表名 WHERE 条件;

    • 更新数据:UPDATE 表名 SET 列=新值 WHERE 条件;

    • 删除表:DROP TABLE 表名;

高级功能
  • 自增主键

    sql 复制代码
    CREATE TABLE 表名 (id INTEGER PRIMARY KEY AUTOINCREMENT, ...);
    INSERT INTO 表名 VALUES (NULL, ...);  -- 自动填充主键  
  • 时间函数

    sql 复制代码
    SELECT date("now");          -- 当前日期  
    SELECT datetime("now", "+8 hours");  -- 当前时间(含时区)  

SQLite可视化工具

bash 复制代码
sudo apt-get install sqlitebrowser  
sqlitebrowser example.db  

C/C++ API接口

  1. 打开数据库

    c 复制代码
    int sqlite3_open(const char *filename, sqlite3 **ppDb);  
    • 参数:filename为数据库路径,ppDb为句柄指针地址
    • 返回值:成功返回SQLITE_OK
  2. 关闭数据库

    c 复制代码
    int sqlite3_close(sqlite3 *db);  
  3. 执行SQL语句

    c 复制代码
    int sqlite3_exec(  
        sqlite3 *db,                   // 数据库句柄  
        const char *sql,               // SQL语句  
        int (*callback)(void*, int, char**, char**),  // 回调函数  
        void *arg,                     // 回调参数  
        char **errmsg                  // 错误信息指针  
    );  
    • 回调函数

      c 复制代码
      int callback(void *arg, int column_count, char **column_values, char **column_names);  
      • 每次查询到数据时触发,column_values为列值数组,column_names为列名数组

注意事项

  • 查询结果均为字符串类型,需手动转换
  • 回调函数触发次数等于查询到的数据行数
  • 错误处理需检查errmsg内容

数据存储方式对比

内存存储

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

持久化存储

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