尝试分页查询(第一次实验失败,注释部分修改,待解决)

This commit is contained in:
flykhan 2023-10-28 15:20:52 +08:00
parent 9ddea88f8c
commit f9fe11d9dc
2 changed files with 53 additions and 19 deletions

View File

@ -8,19 +8,23 @@
// sqlite3的回调函数 // sqlite3的回调函数
// sqlite 每查到一条记录,就调用一次这个回调 // sqlite 每查到一条记录,就调用一次这个回调
int sql_search_callback(void* data, int argc, char** argv, char** azColName) { int sql_search_callback(void *data, int argc, char **argv, char **azColName)
cJSON* result_array = (cJSON*)data; {
cJSON* item = cJSON_CreateObject(); cJSON *result_array = (cJSON *)data;
cJSON *item = cJSON_CreateObject();
// 遍历每一列,并将数据添加到 JSON 对象中 // 遍历每一列,并将数据添加到 JSON 对象中
for (int i = 0; i < argc; i++) { for (int i = 0; i < argc; i++)
{
cJSON_AddStringToObject(item, azColName[i], argv[i] ? argv[i] : ""); cJSON_AddStringToObject(item, azColName[i], argv[i] ? argv[i] : "");
} }
int isDuplicate = 0; int isDuplicate = 0;
cJSON* existingItem = result_array->child; cJSON *existingItem = result_array->child;
while (existingItem != NULL) { while (existingItem != NULL)
if (cJSON_Compare(existingItem, item, 1)) { {
if (cJSON_Compare(existingItem, item, 1))
{
isDuplicate = 1; isDuplicate = 1;
break; break;
} }
@ -28,43 +32,56 @@ int sql_search_callback(void* data, int argc, char** argv, char** azColName) {
} }
// 如果不是重复的结果,则添加到 JSON 数组中 // 如果不是重复的结果,则添加到 JSON 数组中
if (!isDuplicate) { if (!isDuplicate)
{
cJSON_AddItemToArray(result_array, item); cJSON_AddItemToArray(result_array, item);
} }
return 0; return 0;
} }
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;
} }
fprintf(stderr, "ok Opened database successfully\n"); fprintf(stderr, "ok Opened database successfully\n");
// 解析分页参数
int page = 1; // 默认第一页
int limit = 10; // 默认每页10条
if (getenv("QUERY_STRING"))
{
sscanf(getenv("QUERY_STRING"), "page=%d&limit=%d", &page, &limit);
}
// 构建查询语句 // 构建查询语句
char query_sql[128] = ""; char query_sql[128] = "";
sprintf( sprintf(
query_sql, query_sql,
"select temperature, humidity , th_date_time from temp_hum_info ;"); // 构建查询 "select temperature, humidity , th_date_time from temp_hum_info;"); // 构建查询
// "select temperature, humidity , th_date_time from temp_hum_info order by thid desc limit %d offset %d;", limit, (page - 1) * limit); // 构建查询
cJSON* result_array = cJSON_CreateArray(); cJSON *result_array = cJSON_CreateArray();
// printf("query_sql is %s\n", query_sql); // printf("query_sql is %s\n", query_sql);
// 执行查询语句 // 执行查询语句
rc = sqlite3_exec(db, query_sql, sql_search_callback, result_array, rc = sqlite3_exec(db, query_sql, sql_search_callback, result_array,
&zErrMsg); // 执行查询语句 &zErrMsg); // 执行查询语句
// rc = sqlite3_exec(db, query_sql, sql_search_callback, 0, &zErrMsg); // // rc = sqlite3_exec(db, query_sql, sql_search_callback, 0, &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);
@ -72,7 +89,7 @@ int main(int argc, char const* argv[]) {
return 1; return 1;
} }
char* json_str = cJSON_Print(result_array); char *json_str = cJSON_Print(result_array);
printf("Content-Type: application/json;charset=utf-8\r\n"); printf("Content-Type: application/json;charset=utf-8\r\n");
printf("\r\n"); printf("\r\n");

View File

@ -66,11 +66,17 @@
</tbody> </tbody>
</table> </table>
</div> </div>
<!-- 下一页,上一页按钮
<div class="page">
<button onclick="prevPage()" id="prevPage">上一页</button>
<button onclick="nextPage()" id="nextPage">下一页</button>
</div> -->
<script> <script>
function loadBlackData() { function loadBlackData() {
var blackData; var blackData;
fetch("../cgi-bin/green_house_info_show.cgi") fetch("../cgi-bin/green_house_info_show.cgi")
// fetch("../cgi-bin/green_house_info_show.cgi?page="+currentPage+"&limit=10")
.then(resp => resp.json()) .then(resp => resp.json())
.then(data => { .then(data => {
blackData = data; blackData = data;
@ -94,6 +100,17 @@
window.onload = function () { window.onload = function () {
loadBlackData(); loadBlackData();
} }
// // HTML 页面中的按钮点击事件处理程序
// function nextPage() {
// currentPage++; // 增加当前页码
// loadBlackData(); // 重新加载数据
// }
// function prevPage() {
// currentPage--; // 减少当前页码
// loadBlackData(); // 重新加载数据
// }
</script> </script>
</body> </body>