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* |
| 打开数据库 | 文件不存在就自动创建空数据库文件 |

相关推荐
深念Y6 小时前
rime-雾凇拼音-配置记录
linux·junit·软件·拼音·kde
殷色玫瑰8 小时前
C++ string类详解:常用接口、字符串操作与模拟实现
java·linux·c语言·开发语言·数据结构·c++
忆挽篱笙歌8 小时前
gcc,g++
linux
l1t9 小时前
修复WSL CreateInstance/E_UNEXPECTED和 mounted read-only 错误
linux·windows·wsl
Ruiery9 小时前
Linux 6.6内核 CPU 深度解析(九):时钟与 TSC — 内核怎么从 PIT/HPET 切到 TSC
linux·运维·服务器
91刘仁德10 小时前
Linux网络编程从入门到实战:UDP/TCP协议与socket编程全解析
linux·网络·笔记·tcp/ip·udp
水饺编程10 小时前
第1章:下载 Linux 0.12 内核
linux·c语言·汇编·ubuntu
牢姐与蒯10 小时前
一点小碎片——每个线程独有的东西——上下文+栈
linux·运维·服务器
小此方10 小时前
Linux网络(二十):TCP拥塞控制与延迟应答详解:从拥塞窗口到TCP性能优化,理解TCP与UDP的效率差异
linux·网络·php
yunwei3710 小时前
eBPF 开发实践:使用 eBPF 隐藏进程或文件信息
linux·后端·性能优化