当前位置: 首页 > news >正文

Linux系统编程-数据库-SQLite

一、数据库基础概念

1. 什么是数据库?

数据库是一个应用程序,可以对数据进行存储、管理和统计,多和服务器搭配使用。

数据组织方式:

  • 数据以**表(table)**的形式组织在一起
  • 一张表可以分为多个记录(行)
  • 一条记录可以分为多个字段(列)

2. 数据库分类

规模代表产品
大型ORACLE
中型MYSQL / MSSQL
小型(嵌入式)SQLite/ DBII / powdb

以上都是关系型数据库

3. 常见名词

缩写全称含义
DBDatabase数据库,select/update/database
DBMSDatabase Management System数据库管理系统
MISManagement Information System管理信息系统
OAOffice Automation办公自动化

4. SQLite3 简介

官网:www.sqlite.org / www.kernal.org(GNU 开源)

特点:

  1. 开源,C 语言开发
  2. 代码量少,1 万行左右,总大小 10M 以内
  3. 绿色软件,无需安装
  4. 文件型数据库,可以移动(整个数据库就是一个.db文件)
  5. 数据容量最大2T

二、SQL 语言

SQL 是什么?

SQL(Structured Query Language):结构化查询语言,专门操作关系型数据库。

SQL 细分为三类:

分类全称作用关键字
DDLData Definition Language建表、删表CREATEDROP
DMLData Modify Language增、删、改一行数据INSERTDELETEUPDATE
DQLData Query Language查询数据SELECT

三、数据库安装与启动

3.1 安装

sudo apt-get install sqlite3 sudo apt-get install libsqlite3-dev # C语言编程需要这个开发库

3.2 启动(打开/创建数据库)

sqlite3 aaa.db # 打开aaa.db,不存在则自动创建

3.3 控制台常用指令(以.开头的是内置命令)

指令功能
.database列出当前库和系统中那个文件在关联
.tables列出当前数据库中的所有表
.schema xxx列出当前指定的 xxx 表结构
.headers on查询数据的时候显示列名
.exit/.quit/.q退出数据库控制台

四、SQL 语句详解

4.1 DDL — 建表 / 删表

-- 建表语法 create table 表名 (字段名 类型, 字段名 类型, ...); -- 示例 create table user(id int, name char, age int); -- 删除一个表 drop table 表名; drop table user;

常用数据类型:

类型说明
int整数
char/text字符串
datetime日期时间
INTEGER PRIMARY KEY ASC自动增长主键

4.2 DML — 插入数据

-- 插入语法(全部字段) insert into 表名 values (值1, 值2, ...); -- 插入语法(指定字段) insert into 表名 (字段名1, 字段名2) values (值1, 值2); -- 示例 insert into user (id, age) values (1, 10); insert into user values(3, "wang", 11); insert into user (age) values (12); -- 其他字段为NULL

4.3 DQL — 查询数据

-- 查询语法 select 列名 from 表名 条件; -- 查询所有列 select * from user; -- 查询指定列 select id from user; -- 带条件查询 select id, name from user where not age < 30;

通配符(用于模糊查询 LIKE):

-- 查名字是"张X"(张后面只有一个字)且 id < 5 select * from user where name like '张_' and id < 5; -- 查名字以"张"开头且 id < 5 select * from user where name like '张%' and id < 5;

4.4 DML — 修改数据

-- 修改语法 update 表名 set 字段名 = 值 [where 条件]; -- 示例 update user set id = 1 where name = 'li'; update user set id = 1 where name = "li" and passwd = "123"; update user set id = 2 where name = "li" or name = "zhao";

⚠️ 不加 where 条件会修改所有行!

4.5 DML — 删除数据

-- 删除语法 delete from 表名 [where 条件]; -- 删除表中所有数据 delete from user; -- 删除指定条件的数据 delete from user where id = 1; delete from user where id = 1 and name = "zhang"; delete from user where id = 1 or id = 2;

4.6 高级用法

插入时间列:

-- 建表时加 datetime 类型 CREATE TABLE user1(id int, name char, age int, dt datetime); -- 插入时用 datetime('now', '+8 hours') 获取北京时间 insert into user1 values(2, '张三', 23, datetime('now', '+8 hours'));

自动增长列(主键):

-- INTEGER PRIMARY KEY ASC 表示自动增长主键 CREATE TABLE user3(id INTEGER PRIMARY KEY ASC, name char, age int, dt datetime); -- 插入时 id 填 NULL,数据库自动分配 insert into user3 values(NULL, '李四', 23, datetime('now'));

💡PRIMARY KEY:主键,唯一性,如果用主键作为搜索条件,比普通字段块。


五、数据库导入导出

5.1 数据导出

sqlite3 xxx.db .dump > xxx.sql # 将数据库名称为xxx的数据库整体导出到脚本中

5.2 数据导入

sqlite3 xxx.db < xxx.sql

六、C 语言操作 SQLite3

6.1 编程步骤

打开数据库 ==> 读写数据库(增、删、改、查)==> 关闭数据库

6.2 相关函数

3.1 打开数据库:sqlite3_open
int sqlite3_open(char *path, sqlite3 **db);

3.2 关闭数据库:sqlite3_close
int sqlite3_close(sqlite3 *db);

3.3 执行 SQL 语句:sqlite3_exec

📌fun(回调函数):如果 sql 语句是查询操作(SELECT),需要这个函数来回收查询的结果;非查询操作填NULL

获取错误信息

6.3 完整示例代码(增删改)

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sqlite3.h> int main(int argc, char **argv) { sqlite3 *db = NULL; // 1. 打开数据库,获得数据的句柄(相当于linux中的文件描述符) int ret = sqlite3_open("aaa.db", &db); if (SQLITE_OK != ret) { fprintf(stderr, "open db error %s\n", sqlite3_errstr(ret)); sqlite3_close(db); return 1; } char *errmsg = NULL; // 需要执行的sql语句,不要执行查询语句(select) char sql_cmd[512] = "insert into user values(7,'帅哥',20)"; // 2. 执行sql语句(对数据库的读写) ret = sqlite3_exec(db, sql_cmd, NULL, NULL, &errmsg); if (SQLITE_OK != ret) { fprintf(stderr, "sqlite3_exec sql_cmd:[%s] ,%s\n", sql_cmd, errmsg); sqlite3_free(errmsg); // 释放错误信息内存 sqlite3_close(db); return 1; } // 3. 关闭数据,释放资源 sqlite3_close(db); return 0; }

6.4 编译方式

# 需要链接 sqlite3 库(-lsqlite3) gcc xxx.c -o xxx -lsqlite3

七、总结速查表

http://www.jsqmd.com/news/457770/

相关文章:

  • Flutter —— GetIt、Dio
  • 基于springboot的人事管理系统(源码+文档+调试+讲解)
  • C语言二维数组详解:定义与初始化
  • Claw 批量生成公众号文章实践:一天写 100 篇的工作流复盘
  • 基于大数据+Hadoop+深度学习的酒店评论文本情感分析研究设计与开发(源码+精品论文+答辩PPT等资料)
  • 4个关键步骤解决ComfyUI ControlNet Aux模型下载难题:开源工具配置优化指南
  • 阿姆智创15.6寸工控触摸一体机,赋能工业自动化的硬核终端,源头工厂支持ODM定制
  • 保姆级windows+WSL2(非C盘安装)部署OpenClaw
  • 【问题解决】| 【黑马点评】 | 虚拟机IP总是变动,如何修改成固定IP
  • 影音杂乱?远程看片难?Plex+cpolar 打造随身私人影院,解决所有难题
  • 【算法】约数个数、约数和
  • 【保姆级教程】Windows系统下使用国内阿里云大模型接入Claude Code
  • python中交互式和文件式的运行
  • P2并联混动仿真模型:探索未来汽车的动力与经济性
  • [HC04-Arduino]——光电探测器
  • 消息队列(MQ)入门必知必会五大基础概念:异步,削峰,解耦,生产者,消费者详细解读 一篇搞懂 超强类比
  • 11b. OpenAI API密钥获取指南
  • Serverless冷启动性能优化:从Firecracker微虚拟机隔离到代码预热算法的深度实践
  • 如何告别炉石传说“盲打“困境?HSTracker带来的智能对战革命
  • (五)RT-Thread设备驱动实战--IO模型PIN与UART
  • BTC脚本
  • 3步打造你的专属游戏助手:献给LOL玩家的效率提升方案
  • 周红伟:首家独发,腾讯龙虾WorkBuddy股票预测实操,OpenClaw实 - 今日头条
  • 2026冲孔机市场风向标:这些品牌CNC技术领先,PSH-JSM伺服折弯机/光纤激光切割机,冲孔机品牌有哪些 - 品牌推荐师
  • 字母异位词分组
  • 5个方法让Zotero成为LaTeX文献管理的理想工具
  • 超简单!百度贴吧一键自动签到(附Python完整脚本下载 )Windows 教程 养号用!
  • 2026职业小说作者生存指南:新人写小说签约难?AI辅助流工作法+5款主流的工具测评
  • 直播内容管理的自动化革命:如何用douyin-downloader实现高效内容保存
  • 3种高效管理Windows Defender的系统优化方案