能否提供一个C语言中使用SQLite3库来查询特定行和列的具体代码示例?
时间: 2024-10-24 19:15:00 浏览: 19
C语言实现sqlite3的封装
3星 · 编辑精心推荐
当然可以。在C语言中,使用SQLite3库来查询数据库需要先初始化库、创建连接,然后执行SQL命令。这里是一个简单的例子,假设我们有一个名为`users`的表,其中包含`id`、`name`和`email`字段,我们要查询id为1的用户信息:
```c
#include <stdio.h>
#include <sqlite3.h>
// SQLite3回调函数处理查询结果
static int callback(void *data, int argc, char **argv, char **azColName) {
for (int i = 0; i < argc; i++) {
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
void query_user(int id) {
sqlite3 *db;
char *zErrMsg = 0;
int rc;
// 初始化并打开数据库
rc = sqlite3_open("test.db", &db);
if (rc) {
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return;
}
// 编写SQL查询
const char *sql = "SELECT name, email FROM users WHERE id = ?";
sqlite3_stmt *stmt;
// 准备SQL语句
rc = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
if (rc != SQLITE_OK) {
fprintf(stderr, "Preparation failed: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return;
}
// 绑定参数
sqlite3_bind_int(stmt, 1, id);
// 执行查询
rc = sqlite3_step(stmt);
if (rc == SQLITE_ROW) {
callback(NULL, sqlite3_column_count(stmt), (char **)sqlite3_column_text(stmt, 0),
(char **)sqlite3_column_text(stmt, 1));
} else if (rc == SQLITE_DONE) {
printf("No row found for ID %d\n", id);
} else {
fprintf(stderr, "Query execution failed: %s\n", sqlite3_errmsg(db));
}
// 清理资源
sqlite3_finalize(stmt);
sqlite3_close(db);
}
int main() {
query_user(1); // 查询id为1的用户
return 0;
}
```
这个程序会尝试打开一个名为`test.db`的数据库(如果不存在,你需要先创建),并在`users`表中找到id为1的用户,打印其名字和电子邮件。如果你想要改变查询,只需替换`query_user`函数中的`id`值。
阅读全文