Linux下C语言连接SQLite数据库完整示例与编译指南

七月
七月
发布时间:2026-10-15| 6人浏览过
原创

在Linux系统中,使用C语言操作SQLite数据库是嵌入式开发和轻量级应用中的常见需求。本文将通过一个完整的C语言实例,演示如何连接数据库、创建表结构、插入数据以及通过回调函数查询结果,并附带编译所需的Makefile配置。

核心功能与逻辑

该示例程序主要包含四个步骤:连接/创建数据库文件、执行SQL建表语句、插入测试数据、最后通过SELECT查询并打印结果。关键在于理解 sqlite3_exec 函数的使用方式,特别是如何通过回调函数处理查询返回的多行数据。

准备条件

  1. 环境要求:Linux操作系统,已安装GCC编译器及SQLite开发库(通常包含 sqlite3.h 头文件和 libsqlite3.so 动态库)。
  2. 头文件依赖:代码中引入了标准IO库 <stdio.h> 和SQLite C API <sqlite3.h>。

真实操作顺序

第1步:定义数据回调函数

在执行查询前,需要定义一个回调函数来处理查询结果。每当SQLite找到一条匹配的记录,就会调用此函数一次。

目的:格式化输出查询到的列名和列值。
入口:定义 select_callback 函数。
动作:遍历所有列,将列名和列值打印到标准输出。注意处理值为NULL的情况。

int select_callback(void *data, int col_count, char **col_values, char **col_name) {
    int i;
    for(i = 0; i < col_count; i++) {
        // 如果值为null,则输出"NULL"字符串,否则输出实际值
        printf("%s=%s\n", col_name[i], col_values[i] == 0 ? "NULL" : col_values[i]);
    }
    return 0;
}

第2步:初始化数据库连接

目的:打开或创建一个名为“DataBase”的SQLite数据库文件。 入口:main 函数开始处。 动作:调用 sqlite3_open。如果返回值不等于 SQLITE_OK,则打印错误信息并退出程序。

sqlite3 *db = 0;
int ret = sqlite3_open("./DataBase", &db);
if(ret != SQLITE_OK) {
    fprintf(stderr, "无法打开数据库:%s", sqlite3_errmsg(db));
    return 1;
}
printf("数据库连接成功!\n");

第3步:执行建表与插入数据

目的:创建用户表并填充初始测试数据。 入口:main 函数主体。 动作:定义SQL字符串,使用 sqlite3_exec 执行DDL(数据定义语言)和DML(数据操作语言)。注意检查执行结果是否为OK,若失败需释放错误消息内存。

// SQL语句定义
const char *SQL1 = "create table users(id int PRIMARY KEY, name varchar(20), birthday datetime);";
const char *SQL2 = "insert into users values(1,'myd','2013-10-9');";
const char *SQL3 = "insert into users values(2,'myd','2013-10-9');";

// 执行建表
char *ErrMsg = 0;
ret = sqlite3_exec(db, SQL1, 0, 0, &ErrMsg);
if(ret != SQLITE_OK) {
    fprintf(stderr, "SQL Error:%s\n", ErrMsg);
    sqlite3_free(ErrMsg);
}

// 执行插入 (示例仅展示单个插入逻辑,实际需多次调用)
ret = sqlite3_exec(db, SQL2, 0, 0, &ErrMsg);
// 错误处理逻辑同上...

第4步:查询数据并关闭连接

目的:从数据库中读取数据并在控制台显示,随后清理资源。 入口:执行查询语句 SQL4。 动作:调用 sqlite3_exec 执行 SELECT 语句,传入第1步定义的回调函数指针。完成后调用 sqlite3_close 关闭数据库句柄。

const char *SQL4 = "select * from users;";
printf("查询数据表内容\n");
sqlite3_exec(db, SQL4, select_callback, 0, &ErrMsg);

// 关闭数据库
sqlite3_close(db);
db = 0;
printf("数据库关闭成功!\n");

编译配置与Makefile

为了顺利编译上述代码,需要正确链接SQLite库。以下是一个标准的 Makefile 配置说明:

  • CFLAGS:指定库路径 -L、头文件路径 -I 以及链接库名称 -lsqlite3。
  • 构建规则:先编译源文件生成目标文件 .o,再链接生成可执行文件。
CFLAGS=-L /usr/local/sqlite-autoconf-3070400/lib -I/usr/local/sqlite-autoconf-307040/include -lsqlite3

all: sqlite.o sqlite

sqlite:sqlite.o
	gcc sqlite.o -o sqlite $(CFLAGS)

sqlite.o:sqlite.c
	gcc -c sqlite.c $(CFLAGS)

clean:
	rm -rf sqlite *.o

注意:路径 /usr/local/sqlite-autoconf-3070400/ 为示例路径,请根据实际安装位置调整 -L 和 -I 参数。

简要总结

通过上述步骤,我们实现了在Linux环境下使用C语言对SQLite数据库的基本CRUD操作。重点在于掌握 sqlite3_open 的连接机制、sqlite3_exec 的执行方式以及回调函数在处理结果集时的作用。以上就是Linux下C语言操作SQLite数据库连接的详细内容,更多关于C语言与SQLite结合的实用技巧资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。