diff --git a/Platform/user/database/database.c b/Platform/user/database/database.c index 288e611ae..ed60c9169 100644 --- a/Platform/user/database/database.c +++ b/Platform/user/database/database.c @@ -302,7 +302,7 @@ int update_database(int module_id, void * db_handle, int op_type, char * tabl * table_name - 创建的表名 * sql_str - 创建表的SQL语句 * begin_num - 从第几条查询结果开始返回 - * need_num - 应用需要返回的结果条数 + * need_num - 应用需要返回的结果条数, 如果need_num = 0,表示返回所有数据 * param_num - 扩展参数组合数量,填写0表示没有,需要防止SQL注入问题,需要使用扩展参数组合 * Output: *  return_num - 实际返回的结果条数 @@ -341,7 +341,7 @@ void * select_datebase_by_number(int module_id, void * db_handle, char * table_ return NULL; } - if ((begin_num <= 0) || (need_num <= 0)) + if ((begin_num <= 0) || (need_num < 0)) { return NULL; } @@ -447,6 +447,12 @@ void * select_datebase_by_number(int module_id, void * db_handle, char * table_ } json = cJSON_CreateObject(); + if (NULL == json) + { + SQLCloseCursor(hstmt); + SQLFreeStmt(hstmt, SQL_DROP); + return NULL; + } /* 将应用程序数据缓冲区绑定到结果集中的列 */ for (i = 1; i <= column_nmuber; i++) @@ -474,40 +480,87 @@ void * select_datebase_by_number(int module_id, void * db_handle, char * table_ /* 查询结果 */ FetchOrientation = SQL_FETCH_RELATIVE; - for (i = 1; i <= need_num; i++) + + /* need_num为0,表示一次返回所有找到的信息 */ + if (0 == need_num) { - ret = SQLFetchScroll(hstmt, FetchOrientation, begin_num); - FetchOrientation = SQL_FETCH_NEXT; - if (ret != SQL_SUCCESS) + while(1) { - break; - } + ret = SQLFetchScroll(hstmt, FetchOrientation, begin_num); + FetchOrientation = SQL_FETCH_NEXT; + + /* 查找失败,表示已经返回所有找到的信息 */ + if (ret != SQL_SUCCESS) + { + break; + } - ret_num++; + ret_num++; - cJSON_AddItemToArray(array, obj = cJSON_CreateObject()); + cJSON_AddItemToArray(array, obj = cJSON_CreateObject()); - for (j = 1; j <= column_nmuber; j++) - { - if (SQL_BIGINT == db_column_info[j].dateType) - { - cJSON_AddNumberToObject(obj, db_column_info[j].name, *((long long *)&(value[j][0]))); - } - else if (SQL_CHAR == db_column_info[j].dateType) - { - cJSON_AddStringToObject(obj, db_column_info[j].name , value[j][0]); - } - else if (SQL_DOUBLE == db_column_info[j].dateType) - { - cJSON_AddNumberToObject(obj, db_column_info[j].name , *((double *)&(value[j][0]))); - } - else + for (j = 1; j <= column_nmuber; j++) { + if (SQL_BIGINT == db_column_info[j].dateType) + { + cJSON_AddNumberToObject(obj, db_column_info[j].name, *((long long *)&(value[j][0]))); + } + else if (SQL_CHAR == db_column_info[j].dateType) + { + cJSON_AddStringToObject(obj, db_column_info[j].name , value[j][0]); + } + else if (SQL_DOUBLE == db_column_info[j].dateType) + { + cJSON_AddNumberToObject(obj, db_column_info[j].name , *((double *)&(value[j][0]))); + } + else + { + /* 不支持类型,后续增加统计和打印 */ + } } - } } + else + { + for (i = 1; i <= need_num; i++) + { + ret = SQLFetchScroll(hstmt, FetchOrientation, begin_num); + FetchOrientation = SQL_FETCH_NEXT; + + /* 查找失败,表示已经返回所有找到的信息 */ + if (ret != SQL_SUCCESS) + { + break; + } + + ret_num++; + + cJSON_AddItemToArray(array, obj = cJSON_CreateObject()); + + for (j = 1; j <= column_nmuber; j++) + { + if (SQL_BIGINT == db_column_info[j].dateType) + { + cJSON_AddNumberToObject(obj, db_column_info[j].name, *((long long *)&(value[j][0]))); + } + else if (SQL_CHAR == db_column_info[j].dateType) + { + cJSON_AddStringToObject(obj, db_column_info[j].name , value[j][0]); + } + else if (SQL_DOUBLE == db_column_info[j].dateType) + { + cJSON_AddNumberToObject(obj, db_column_info[j].name , *((double *)&(value[j][0]))); + } + else + { + /* 不支持类型,后续增加统计和打印 */ + } + + } + } + } + SQLCloseCursor(hstmt); SQLFreeStmt(hstmt, SQL_DROP);