回调函数v1

This commit is contained in:
flykhan 2023-10-25 14:37:39 +08:00
parent 9d07810e70
commit 2da456316c
1 changed files with 41 additions and 26 deletions

View File

@ -5,18 +5,20 @@
// sqlite3的回调函数 // sqlite3的回调函数
// sqlite 每查到一条记录,就调用一次这个回调 // sqlite 每查到一条记录,就调用一次这个回调
int sql_search_callback(void* NotUsed, int argc, char** argv, char** azColName); int sql_search_callback(void *NotUsed, int argc, char **argv, char **azColName);
int main(int argc, char const* argv[]) { int main(int argc, char const *argv[])
{
// 连接到 SQLite 数据库 // 连接到 SQLite 数据库
sqlite3* db; // 声明 sqlite3 类型变量,即声明一个数据库对象 sqlite3 *db; // 声明 sqlite3 类型变量,即声明一个数据库对象
char* zErrMsg = 0; // 用于存储错误信息 char *zErrMsg = 0; // 用于存储错误信息
int rc; // 用于存储函数返回值 int rc; // 用于存储函数返回值
rc = sqlite3_open( rc = sqlite3_open(
"../sql_base/green_house.db", "../sql_base/green_house.db",
&db); // 打开指定的数据库文件,如果不存在将创建一个同名的数据库文件 &db); // 打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
if (rc) { if (rc)
{
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db); sqlite3_close(db);
return 1; return 1;
@ -28,19 +30,21 @@ int main(int argc, char const* argv[]) {
fgets(request_data, 128, stdin); // 从标准输入中读取一行数据 fgets(request_data, 128, stdin); // 从标准输入中读取一行数据
// 解析 JSON 数据 // 解析 JSON 数据
cJSON* json_buf = cJSON_Parse(request_data); // 解析 JSON 数据 cJSON *json_buf = cJSON_Parse(request_data); // 解析 JSON 数据
if (json_buf == NULL) { if (json_buf == NULL)
{
fprintf(stderr, "Error parsing JSON data\n"); fprintf(stderr, "Error parsing JSON data\n");
sqlite3_close(db); sqlite3_close(db);
return 1; return 1;
} }
// 获取用户名和密码 // 获取用户名和密码
cJSON* user = cJSON_GetObjectItemCaseSensitive(json_buf, "name"); cJSON *user = cJSON_GetObjectItemCaseSensitive(json_buf, "name");
cJSON* password = cJSON_GetObjectItemCaseSensitive(json_buf, "password"); cJSON *password = cJSON_GetObjectItemCaseSensitive(json_buf, "password");
if (user == NULL || password == NULL || !cJSON_IsString(user) || if (user == NULL || password == NULL || !cJSON_IsString(user) ||
!cJSON_IsString(password)) { // 是否是非法输入 !cJSON_IsString(password))
{ // 是否是非法输入
fprintf(stderr, fprintf(stderr,
"Error getting username and/or password from JSON data\n"); "Error getting username and/or password from JSON data\n");
cJSON_Delete(json_buf); cJSON_Delete(json_buf);
@ -49,8 +53,8 @@ int main(int argc, char const* argv[]) {
} }
// 拿到用户名和密码 // 拿到用户名和密码
char* username_from_frontend = user->valuestring; char *username_from_frontend = user->valuestring;
char* password_from_frontend = password->valuestring; char *password_from_frontend = password->valuestring;
printf("username is %s, pwd is %s\n", username_from_frontend, printf("username is %s, pwd is %s\n", username_from_frontend,
password_from_frontend); password_from_frontend);
@ -58,14 +62,16 @@ int main(int argc, char const* argv[]) {
// 构建查询语句 // 构建查询语句
char query_sql[128] = ""; char query_sql[128] = "";
sprintf(query_sql, sprintf(query_sql,
"select * from login_users where username='%s' and password='%s'", "select * from login_users where username='%s' and password='%s';",
username_from_frontend, password_from_frontend); // 构建查询语句 username_from_frontend, password_from_frontend); // 构建查询语句
printf("query_sql is %s\n", query_sql);
// 执行查询语句 // 执行查询语句
// rc = sqlite3_exec(db, query_sql, 0, 0, &zErrMsg); // 执行查询语句 // rc = sqlite3_exec(db, query_sql, 0, 0, &zErrMsg); // 执行查询语句
rc = sqlite3_exec(db, query_sql, sql_search_callback, 0, rc = sqlite3_exec(db, query_sql, sql_search_callback, 0, &zErrMsg); // 执行查询语句
&zErrMsg); // 执行查询语句 if (rc != SQLITE_OK)
if (rc != SQLITE_OK) { {
fprintf(stderr, "SQL error: %s\n", zErrMsg); fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg); sqlite3_free(zErrMsg);
cJSON_Delete(json_buf); cJSON_Delete(json_buf);
@ -74,14 +80,14 @@ int main(int argc, char const* argv[]) {
} }
// 构建 JSON 数据 // 构建 JSON 数据
cJSON* result_json = cJSON_CreateObject(); cJSON *result_json = cJSON_CreateObject();
cJSON_AddItemToObject(result_json, "result", cJSON_CreateString("success")); cJSON_AddItemToObject(result_json, "result", cJSON_CreateString("success"));
cJSON_AddItemToObject(result_json, "username", cJSON_AddItemToObject(result_json, "username",
cJSON_CreateString(username_from_frontend)); cJSON_CreateString(username_from_frontend));
// 打印 JSON 数据 // 打印 JSON 数据
char* result_json_str = cJSON_Print(result_json); char *result_json_str = cJSON_Print(result_json);
printf("%s\n", result_json_str); // printf("%s\n", result_json_str);
// 释放资源 // 释放资源
cJSON_Delete(json_buf); cJSON_Delete(json_buf);
@ -91,7 +97,16 @@ int main(int argc, char const* argv[]) {
return 0; return 0;
} }
int sql_search_callback(void* NotUsed, int sql_search_callback(void *NotUsed,
int argc, int argc,
char** argv, char **argv,
char** azColName) {} char **azColName)
{
int i;
for (i = 0; i < argc; i++)
{
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
return 0;
}