sqlite.exec()回调函数
时间: 2023-11-01 12:14:19 浏览: 89
在 SQLite 中,exec() 函数可以执行一条或多条 SQL 语句,同时也可以注册一个回调函数,该函数在执行每条语句时被调用。
回调函数的原型如下:
```
int callback(void *data, int argc, char **argv, char **azColName);
```
其中:
- `data` 是一个指向你在调用 exec() 函数时传递的数据的指针。
- `argc` 是结果集中的列数。
- `argv` 包含结果集中每一行的值。
- `azColName` 包含结果集中每一列的名称。
回调函数需要返回一个整数值,该值用于指示函数的执行结果。返回 0 表示成功,返回非零值表示错误。
下面是一个示例程序,演示了如何使用 exec() 函数和回调函数来执行 SQL 语句:
```c
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
// 回调函数
int callback(void *data, int argc, char **argv, char **azColName) {
int i;
fprintf(stderr, "%s: ", (const char*)data);
for(i = 0; i < argc; i++) {
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
int main(int argc, char* argv[]) {
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 1;
}
// 执行 SQL 语句
rc = sqlite3_exec(db, "SELECT * FROM users", callback, "SELECT", &zErrMsg);
if(rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
// 关闭数据库
sqlite3_close(db);
return 0;
}
```
在上面的示例程序中,我们首先打开了一个名为 `test.db` 的 SQLite 数据库,然后执行了一条 SQL 语句 `SELECT * FROM users`,并注册了一个名为 `callback` 的回调函数。该函数会在执行每条语句时被调用,并输出结果集中每一行的值。最后,我们关闭了数据库。
执行上面的示例程序,输出结果如下:
```
SELECT: id = 1
SELECT: name = John
SELECT: age = 25
SELECT: id = 2
SELECT: name = Mary
SELECT: age = 30
SELECT: id = 3
SELECT: name = Bob
SELECT: age = 35
```
这里我们假设 `users` 表已经存在,并包含三个字段 `id`、`name` 和 `age`。
阅读全文