【sqlite3数据库】一站式学会 增删改查 以及数据库c接口编程

欢迎各位读者来到本篇博客!今天我们将一起走进 SQLite3 的世界,从基础概念到 C/C++ API 实战,循序渐进地掌握这款轻量级嵌入式数据库的核心用法。无论你是刚接触数据库的初学者,还是希望快速上手 SQLite3 的开发者,本文都会为你提供清晰、完整的讲解。让我们开始吧!

1. 数据库文件与普通文件区

1.普通文件对数据管理(增删改查)效率低

2.数据库对数据管理效率高,使用方

2. 常用数据库

2.1 关系型数据库

关系型数据库将复杂的数据结构简化为二维表格形式,是目前应用最广泛的数据库类型。根据规模不同,常见的关系型数据库可分为以下几类:

  • 大型:Oracle、DB2
  • 中型:MySQL、SQLServer
  • 小型:SQLite

2.2 非关系型数据库

非关系型数据库以键值对存储,且结构不固定,适合处理灵活多变的数据模型。常见的非关系型数据库包括:

  • JSON:轻量级数据交换格式
  • Redis:基于内存的键值存储数据库
  • MongoDB:文档型数据库

2.3 嵌入式数据库

SQLite3 是一款典型的嵌入式数据库,具有以下特点:

  • 开源免费,使用 C 语言开发
  • 代码量少,约 1 万行左右,总大小 10M 以内
  • 文件型数据库,可以随意移动
  • 数据容量最大可达 2T

2.4 SQLite3 的安装

在 Ubuntu 系统中,可以通过以下命令在线安装 SQLite3:

bash 复制代码
sudo apt-get install sqlite3
sudo apt-get install libsqlite3

2.5 SQLite3 相关命令

创建数据库:

bash 复制代码
sqlite3 xxx.db

进入数据库后,常用的命令如下:

.help 查看帮助信息

.tables 查看数据库中的表名

.headers on/off 打开/关闭表头

.mode column 设置表左对齐

.quit 退出数据库

2.6 SQLite3 提供的 SQL 语句

SQLite3 支持标准的 SQL 语法,且不区分大小写。其数据类型包括:

  • NULL:空类型
  • INTEGER:整数类型
  • REAL:浮点型
  • TEXT:字符串类型(文本)
  • BLOB:根据输入确定
2.6.1 创建表
sql 复制代码
CREATE TABLE 表名(列名1 数据类型1, 列名2 数据类型2, 列名3 数据类型3);

示例:

sql 复制代码
CREATE TABLE class1(id INTEGER, name TEXT, score REAL);
2.6.2 插入数据
sql 复制代码
INSERT INTO 表名 VALUES(值1, 值2, 值3);

示例:

sql 复制代码
INSERT INTO class1 VALUES(1, "zhangsan", 88.5);

注意:TEXT 类型的数据,插入时需要用双引号或单引号引起来。

2.6.3 查找数据

查找数据库中的所有数据:

sql 复制代码
SELECT * FROM 表名;

查找指定列数据:

sql 复制代码
SELECT 列名1, 列名2 FROM 表名;

条件查找:

sql 复制代码
SELECT * FROM 表名 WHERE 列 关系运算符 值;

示例:

sql 复制代码
SELECT * FROM class1 WHERE id = 1;

关系运算符包括:=>>=<=<!=

连接多个条件可以使用 ANDOR

模糊查找:

  • %:模糊匹配若干个字符
  • _:模糊匹配一个字符

示例:

sql 复制代码
SELECT * FROM class1 WHERE name LIKE "马%";
sql 复制代码
SELECT * FROM class1 WHERE name LIKE "马__";

有序查找:

sql 复制代码
SELECT * FROM 表名 ORDER BY 列名 ASC;   -- 升序显示
sql 复制代码
SELECT * FROM 表名 ORDER BY 列名 DESC;  -- 降序显示
2.6.4 删除数据
sql 复制代码
DELETE FROM 表名 WHERE 条件;
2.6.5 修改数据
sql 复制代码
UPDATE 表名 SET 列 = 新值 WHERE 条件;
2.6.6 删除表
sql 复制代码
DROP TABLE 表名;
2.6.7 主键值自动增长
sql 复制代码
CREATE TABLE 表名(列名 INTEGER PRIMARY KEY AUTOINCREMENT, 列名 数据类型);

2.7 数据库的可视化工具

在 Ubuntu 系统中,可以安装 SQLiteBrowser 进行可视化操作:

bash 复制代码
sudo apt-get install sqlitebrowser

打开数据库:

bash 复制代码
sqlitebrowser xxx.db

在 Windows 系统中,可以使用 Navicat for SQLite 进行数据库可视化操作。

7. sqlite3 提供的 C/C++ API 接口

sqlite3 提供了丰富的 C/C++ API,方便开发者在程序中直接操作数据库。本节将重点介绍三个最常用的接口:sqlite3_opensqlite3_errmsgsqlite3_exec,并结合示例代码帮助大家快速上手。

7.1 打开数据库:sqlite3_open

在使用 sqlite3 之前,首先需要打开(或创建)一个数据库文件。sqlite3_open 函数用于完成这一操作。

c 复制代码
int sqlite3_open(
    const char *filename,   /* 数据库文件名 (UTF-8) */
    sqlite3 **ppDb          /* 输出:数据库句柄 */
);

**功能:**打开一个数据库文件,如果文件不存在则自动创建。

参数说明:

  • filename:数据库文件名,例如 "stu.db"。
  • ppDb:用于保存数据库句柄的指针,类型为 sqlite3 *。

返回值:

  • 成功:返回 SQLITE_OK。
  • 失败:返回错误码。

示例代码:

c 复制代码
#include <stdio.h>
#include <sqlite3.h>
int main() {
sqlite3 *db = NULL;
int rc = sqlite3_open("stu.db", &db);
if (rc != SQLITE_OK) {
printf("打开数据库失败: %s\n", sqlite3_errmsg(db));
return -1;
}
printf("数据库打开成功!\n");
sqlite3_close(db);
return 0;
}

7.2 获取错误信息:sqlite3_errmsg

当数据库操作出错时,可以通过 sqlite3_errmsg 获取对应的错误描述信息,便于排查问题。

c 复制代码
const char *sqlite3_errmsg(sqlite3 *pdb);

**功能:**获取当前数据库错误码对应的错误信息字符串。

参数说明:

  • pdb:数据库句柄。

**返回值:**错误信息字符串。

示例代码:

c 复制代码
if (rc != SQLITE_OK) {
    fprintf(stderr, "SQL 错误: %s\n", sqlite3_errmsg(db));
}

7.3 执行 SQL 语句:sqlite3_exec

sqlite3_exec 是 sqlite3 中最常用的接口,可以执行任意 SQL 语句(建表、插入、查询、删除、更新等)。

c 复制代码
int sqlite3_exec(
    sqlite3 *pdb,                          /* 数据库句柄 */
    const char *sql,                       /* 要执行的 SQL 语句 */
    int (*callback)(void*, int, char**, char**), /* 回调函数 */
    void *arg,                             /* 传递给回调函数的参数 */
    char **errmsg                          /* 错误信息输出 */
);

**功能:**执行一条或多条 SQL 语句。

参数说明:

  • pdb:数据库句柄。
  • sql:要执行的 SQL 语句字符串。
  • callback:回调函数指针,当执行 SELECT 查询且查询到数据时,每行数据都会触发一次回调。
  • arg:传递给回调函数的参数(实参)。
  • errmsg:用于保存出错信息的指针。

返回值:

  • 成功:返回 SQLITE_OK。
  • 失败:返回错误码。

7.3.1 回调函数详解

c 复制代码
int callback(void *arg, int n, char **value, char **name);

**功能:**当 SELECT 查询到数据时执行的回调函数。

参数说明:

  • arg:由 sqlite3_exec 的第 4 个参数传递过来的值(形参)。
  • n:SELECT 查询结果集的列数。
  • value:每一列的值,类型为 char *value\[\]。
  • name:每一列的字段名(表头),类型为 char *name\[\]。

返回值:

  • 成功:返回 0。
  • 失败:返回非 0。

示例代码:

c 复制代码
#include <stdio.h>
#include <sqlite3.h>
int callback(void *arg, int n, char **value, char **name) {
for (int i = 0; i < n; i++) {
printf("%s = %s\n", name[i], value[i] ? value[i] : "NULL");
}
printf("------------------\n");
return 0;
}
int main() {
sqlite3 *db = NULL;
char *errmsg = NULL;
sqlite3_open("stu.db", &db);
// 创建表
char *sql_create = "CREATE TABLE IF NOT EXISTS class1(id INTEGER, name TEXT, score REAL);";
sqlite3_exec(db, sql_create, NULL, NULL, &errmsg);
// 插入数据
char *sql_insert = "INSERT INTO class1 VALUES(1, 'zhangsan', 88.5);";
sqlite3_exec(db, sql_insert, NULL, NULL, &errmsg);
// 查询数据(触发回调)
char *sql_select = "SELECT * FROM class1;";
sqlite3_exec(db, sql_select, callback, NULL, &errmsg);
sqlite3_close(db);
return 0;
}

7.4 使用注意事项

  1. callback 必须要有返回值,返回 0 表示正常,返回非 0 表示异常。

  2. 当 SELECT 查询数据时,每找到一条数据,callback 就会被触发一次。

  3. 数据库中的数据通过 SELECT 查询出来时,统一按照字符串处理。

7.5 本章小结

本节介绍了 sqlite3 的三大核心 API:sqlite3_open 负责打开数据库,sqlite3_errmsg 负责错误信息获取,sqlite3_exec 负责执行 SQL 语句。其中 sqlite3_exec 的回调机制是查询数据的关键,需要重点掌握。建议读者结合示例代码动手实践,加深理解。

相关推荐
风123456789~1 小时前
【架构专栏】第6章 数据库设计基础知识 4/4
数据库·架构
IvorySQL2 小时前
代价比较的变革——PostgreSQL执行计划干预增强深度解析
数据库·postgresql·ffmpeg
SL-staff2 小时前
离散制造企业如何应对频繁插单?智能排产系统带来新思路
大数据·数据库·人工智能·技术教程·智能排产·jvs-aps·排产系统
码云数智-园园2 小时前
Oracle 锁等待、会话阻塞故障复盘:生产事故排查步骤
数据库·oracle
哈__3 小时前
从 MySQL 到在线表格:NocoDB 自托管部署、数据导入与远程访问
数据库·mysql
倔强的石头1064 小时前
高可用与无感扩容——分布式时序数据库选型指南
数据库·分布式·时序数据库
袋鼠云数栈12 小时前
实时湖仓如何真正做到“数据够新”?
大数据·数据库·人工智能·数据治理
ACP广源盛1392462567312 小时前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#YLB3116 中端多盘存储扩展在 AI 服务中的机会与应用场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
ACP广源盛1392462567313 小时前
M6/M5 Pro Mac mini 端侧 AI 新形态@ACP#GSV5800 Serdes 长距离视频传输在 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos·音视频