Linux‑SQLite3 数据库

一、数据库基础概念

普通文件 vs 数据库文件

|------|-----------------|------------------------|
| 对比项 | 普通文件 | 数据库文件 (SQLite) |
| 数据操作 | 自己写代码实现增删改查,效率低 | 内置 SQL 语句,增删改查接口成熟,效率高 |
| 并发访问 | 需要自己处理加锁 | 内置锁机制,支持多进程 / 线程访问 |
| 索引 | 无索引,查找全部遍历 | 支持索引,大数据查询速度快 |
| 容错 | 程序异常容易损坏文件 | 有事务机制,保证数据安全 |

数据库分类

  1. 关系型数据库:以二维表格存储数据

    1. 大型:Oracle、DB2

    2. 中型:MySQL、SQL Server

    3. 小型嵌入式:SQLite3(文件数据库,适合嵌入式 Linux)

  2. 非关系型数据库 (NoSQL):键值对形式,结构灵活

    1. Redis(内存数据库)、MongoDB

SQLite3 特点

  1. 开源免费,纯 C 语言开发,代码量小

  2. 文件型数据库 :全部数据保存在一个.db文件,可以拷贝、迁移

  3. 轻量,最大支持 2TB 数据,适合嵌入式设备

  4. 不需要独立服务进程,直接库函数调用访问

SQLite3 安装(Ubuntu)

二、SQLite3 命令行操作

打开数据库:

sqlite3 stu.db

|-------------------|---------------|
| 点命令 | 功能 |
| .help | 查看帮助 |
| .tables | 查看数据库内所有表名 |
| .headers on/off | 开启 / 关闭查询表头显示 |
| .mode column | 查询结果按列对齐显示 |
| .quit | 退出 sqlite3 终端 |

⚠️ 点命令以 . 开头,不需要分号;SQL 语句必须以分号 ; 结尾。

SQLite 支持数据类型

|-----------|--------------------|
| 类型 | 说明 |
| NULL | 空值 |
| INTEGER | 整数 |
| REAL | 浮点数 |
| TEXT | 字符串文本,用""或''包裹 |
| BLOB | 二进制原始字节数据 |

常用 SQL 语句

1.创建表 2.插入数据

3.查询数据 select

4.修改更新 update

update class1 set score=90 where id=1;

5.删除数据 delete

delete from class1 where id=1;

6.删除整张表

drop table class1;

三、SQLite3 C 语言 API(编程接口)

|--------------------------------------------------|------------------------|--------------------------------|
| 函数 | 功能 | 返回值说明 |
| sqlite3_open(filename, &ppDb) | 打开 / 创建数据库文件 | 成功返回SQLITE_OK;失败返回错误码 |
| sqlite3_errmsg(pdb) | 获取错误信息字符串 | 返回 char * 错误描述 |
| sqlite3_exec(pdb, sql, callback, arg, &errmsg) | 执行 SQL 语句(建表、增、删、改、查询) | 成功SQLITE_OK;select 查询会触发回调函数 |
| sqlite3_close(pdb) | 关闭数据库 | 成功SQLITE_OK |

回调函数原型(select 查询专用)

int callback(void *arg, int n_column, char **value, char **name);

参数说明:

  1. arg:调用sqlite3_exec传入的用户参数

  2. n_column:查询结果的列数

  3. value[]:每一列数据,全部是字符串形式

  4. name[]:每一列的表头字段名

每查到一行数据,回调函数执行一次;返回值必须为 0。

简单 C 语言代码框架

复制代码

编译链接必须加 -lsqlite3

gcc main.c -o app -lsqlite3

四、重点总结

|--------------|-------------------------------------------|
| 项目 | 关键点 |
| SQLite3 存储形式 | 单个 db 文件,不需要服务进程 |
| 主键自增关键字 | INTEGER PRIMARY KEY AUTOINCREMENT |
| SQL 语句结尾 | 必须带;;点命令.开头不要分号 |
| 查询 select | 执行sqlite3_exec会循环调用 callback,一行调用一次 |
| 编译链接 | 加库 -lsqlite3 |
| 数据类型 | 存入数字、浮点,读出回调里全部为字符串 char* |
| 打开数据库 | 文件不存在就自动创建空数据库文件 |

相关推荐
测试界的小码农2 小时前
【Linux 命令实战(06):Linux 文件权限管理,掌握 chmod、chown、chgrp】
linux·运维·服务器
一条破秋裤4 小时前
【1114】【并发控制】【笔记】
linux
2035去旅行5 小时前
ADB的底层原理
linux·adb·嵌入式·arm·soc
武子康5 小时前
单卡 A6000 跑 Qwen-Drive:怎样留下可比较的第一条基线?
linux·人工智能·深度学习
女神下凡5 小时前
芯参谋(107):杰理AC_中科蓝讯_开发指南
linux·服务器·网络·单片机·嵌入式硬件
落羽的落羽5 小时前
【C++】C++17的主要特性
linux·服务器·开发语言·c++·算法·机器学习
爱和冰阔落10 小时前
【Linux网络】TCP 半包粘包怎么解决?从长度报头、JSON 拆包到网络计算器完整实战
linux·运维·网络·tcp/ip
say_fall12 小时前
【Linux网络编程】UDP套接字编程:系统编程组件、基础回显服务、InetAddr与地址转换、翻译服务与线程池聊天室
linux·服务器·网络·udp·vr
ö Constancy12 小时前
一台电脑的硬件组成与作用:按功能分类详解(Windows 与 Linux 视角)
linux·windows·电脑
江湖有缘12 小时前
基于Ubuntu部署SoduWork:企业级 AI 原生协同平台实战全流程
linux·人工智能·ubuntu·ai·soduwork