面试题答案
一键面试以下以C语言为例:
- 包含头文件:
#include <sqlite3.h>
#include <stdio.h>
#include <stdlib.h>
这一步包含了SQLite的头文件以及标准输入输出和标准库的头文件,以便使用相关函数。
- 定义回调函数:
static int callback(void *data, int argc, char **argv, char **azColName) {
int i;
for(i = 0; i < argc; i++) {
printf("%s = %s\t", azColName[i], argv[i]? argv[i] : "NULL");
}
printf("\n");
return 0;
}
该回调函数用于处理查询结果的每一行数据。data
是传递给回调函数的用户数据(在后续 sqlite3_exec
中会用到),argc
是当前行的列数,argv
是一个字符串数组,包含当前行每一列的值,azColName
是一个字符串数组,包含每一列的名称。在这个例子中,我们简单地将列名和对应的值打印出来。
- 封装查询函数:
void executeQuery(const char *sql) {
sqlite3 *db;
char *zErrMsg = 0;
int rc;
// 打开SQLite数据库
rc = sqlite3_open("test.db", &db);
if(rc) {
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
return;
} else {
fprintf(stdout, "Opened database successfully\n");
}
// 执行SQL查询
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
if(rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} else {
fprintf(stdout, "Operation done successfully\n");
}
// 关闭数据库
sqlite3_close(db);
}
sqlite3_open
用于打开一个SQLite数据库,如果数据库不存在则会创建一个新的。test.db
是数据库文件名,打开成功后db
会指向这个数据库连接。sqlite3_exec
执行传入的SQL语句。sql
是要执行的SQL查询字符串,callback
是处理查询结果的回调函数,0
表示没有传递给回调函数的用户数据,zErrMsg
用于接收执行过程中的错误信息。如果执行失败,打印错误信息并释放错误信息字符串。sqlite3_close
关闭数据库连接,释放相关资源。
- 调用查询函数:
int main() {
const char *sql = "SELECT * FROM your_table;";
executeQuery(sql);
return 0;
}
在 main
函数中定义要执行的SQL语句,并调用 executeQuery
函数执行查询。
以上代码实现了一个简单的SQLite查询函数封装,用于执行SQL查询并处理结果集。实际应用中,可能需要更复杂的错误处理和结果集处理逻辑。