#include #include #include #include #include "includes/sqlite3.h" // cJSON *result_json; // 用于存储查询结果 // sqlite3的回调函数 // sqlite 每查到一条记录,就调用一次这个回调 int sql_search_callback(void* data, int argc, char** argv, char** azColName) { cJSON* result_array = (cJSON*)data; cJSON* item = cJSON_CreateObject(); // 遍历每一列,并将数据添加到 JSON 对象中 for (int i = 0; i < argc; i++) { cJSON_AddStringToObject(item, azColName[i], argv[i] ? argv[i] : ""); } int isDuplicate = 0; cJSON* existingItem = result_array->child; while (existingItem != NULL) { if (cJSON_Compare(existingItem, item, 1)) { isDuplicate = 1; break; } existingItem = existingItem->next; } // 如果不是重复的结果,则添加到 JSON 数组中 if (!isDuplicate) { cJSON_AddItemToArray(result_array, item); } return 0; } int main(int argc, char const* argv[]) { // 连接到 SQLite 数据库 sqlite3* db; // 声明 sqlite3 类型变量,即声明一个数据库对象 char* zErrMsg = 0; // 用于存储错误信息 int rc; // 用于存储函数返回值 rc = sqlite3_open( "../sql_base/green_house.db", &db); // 打开指定的数据库文件,如果不存在将创建一个同名的数据库文件 if (rc) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return 1; } fprintf(stderr, "ok Opened database successfully\n"); // 构建查询语句 char query_sql[128] = ""; sprintf( query_sql, "select temperature, humidity , th_date_time from temp_hum_info;"); // 构建查询 cJSON* result_array = cJSON_CreateArray(); // printf("query_sql is %s\n", query_sql); // 执行查询语句 rc = sqlite3_exec(db, query_sql, sql_search_callback, result_array, &zErrMsg); // 执行查询语句 // rc = sqlite3_exec(db, query_sql, sql_search_callback, 0, &zErrMsg); // // 执行查询语句 if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); // cJSON_Delete(json_buf); sqlite3_close(db); return 1; } char* json_str = cJSON_Print(result_array); printf("Content-Type: application/json;charset=utf-8\r\n"); printf("\r\n"); printf("%s", json_str); free(json_str); cJSON_Delete(result_array); // 释放资源 sqlite3_close(db); return 0; }