Linux下C语言连接SQLite数据库完整示例与编译指南
在Linux系统中,使用C语言操作SQLite数据库是嵌入式开发和轻量级应用中的常见需求。本文将通过一个完整的C语言实例,演示如何连接数据库、创建表结构、插入数据以及通过回调函数查询结果,并附带编译所需的Makefile配置。
核心功能与逻辑
该示例程序主要包含四个步骤:连接/创建数据库文件、执行SQL建表语句、插入测试数据、最后通过SELECT查询并打印结果。关键在于理解 sqlite3_exec 函数的使用方式,特别是如何通过回调函数处理查询返回的多行数据。
准备条件
- 环境要求:Linux操作系统,已安装GCC编译器及SQLite开发库(通常包含
sqlite3.h头文件和libsqlite3.so动态库)。 - 头文件依赖:代码中引入了标准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结合的实用技巧资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













