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

相关推荐
渡我白衣1 小时前
Util工具类功能设计与类设计
linux·服务器·网络·c++·人工智能·目标检测·机器学习
小此方1 小时前
Linux网络(十一):HTTP重定向与请求方法详解:从301/302状态码到GET/POST,再认识Fiddler抓包
linux·网络·http
KANGBboy1 小时前
doris+kafka安装部署(单机+集群)六安装部署
linux
爱和冰阔落2 小时前
【Linux】手写日志与固定线程池:任务队列、工作线程和安全退出
linux·运维·c++·redis·安卓
inkuu2 小时前
WSL启动慢问题分析与修复
linux
JJJennie7774 小时前
MAI Gateway技术揭秘:大模型网关能做什么?从原理到落地
linux·服务器·网络·ai网关
风哥2号6 小时前
数据库教程FGMT02‑生产环境Linux+Oracle19c安装配置与项目实战
linux·数据库·ffmpeg
wuminyu9 小时前
Kafka中sendfile与mmap实现机制解析
java·linux·c语言·jvm·c++
新时代牛马10 小时前
嵌入式网络完整篇:从LwIP/以太网驱动到 Linux netdev 与排障
linux·网络·php