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

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

在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 相关产品和应用

全部下载

专题列表