89 lines
2.6 KiB
C
89 lines
2.6 KiB
C
#include <cjson/cJSON.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#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;
|
|
}
|