【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;

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

连接多个条件可以使用 AND 和 OR。

模糊查找:

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

示例:

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_open 、sqlite3_errmsg 和 sqlite3_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 的回调机制是查询数据的关键,需要重点掌握。建议读者结合示例代码动手实践,加深理解。

相关推荐
weixin_511255215 小时前
MySQL升级记录
数据库·mysql
程序猿乐锅6 小时前
【黑马点评 | 第八篇】Redisson分布式锁
java·数据库·spring boot·redis·分布式·spring·缓存
Leo.yuan6 小时前
2026年本地化Data Agent优质厂商盘点:哪些产品更适合企业生产环境
大数据·数据库·人工智能
做运维的阿瑞6 小时前
数据库增删改的安全写法
数据库·sql·mysql
程序边界6 小时前
迁移评估不再拍脑袋,这个数据迁移工具的量化报告把我救了(上)
数据库
阿狗童鞋7 小时前
Redis实战指南
数据库·redis·缓存
lupai8 小时前
维修保养记录精准版 API 对接实战指南
数据库·python
2601_9521963611 小时前
计算机科学与技术专业应届生投商业分析岗,需要哪些额外能力?
数据库·oracle
皮皮学姐分享-ppx11 小时前
地级市、省级人才政策强度测算(2000-2025)
大数据·数据库·人工智能·百度·高考
晚安日记wanna11 小时前
大厂禁 JOIN 的真正原因,拆到第四层才清楚
数据库·后端·面试