Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中,将记录检索到JSON数组中更有效的方法是什么?C_Mysql_C_Json_Database_Memory Management - Fatal编程技术网

在MySQL中,将记录检索到JSON数组中更有效的方法是什么?C

在MySQL中,将记录检索到JSON数组中更有效的方法是什么?C,mysql,c,json,database,memory-management,Mysql,C,Json,Database,Memory Management,我在我的C应用程序中使用MySQL。我创建了一个函数 GetInDB(char *query, cJSON **json){... 这将把json分配为json数组,查询数据库,并将记录存储在数组中。问题在于,似乎很难快速获取表中每列的字段名。因为我事先不知道每个名称的字符串长度,所以我必须遍历结果并动态分配(!)一个足够大的字符串来容纳每个名称。然后,我必须遍历每条记录。有更好的办法吗 int GetInDB(const char *query, cJSON **json) { if

我在我的C应用程序中使用MySQL。我创建了一个函数

GetInDB(char *query, cJSON **json){...
这将把json分配为json数组,查询数据库,并将记录存储在数组中。问题在于,似乎很难快速获取表中每列的字段名。因为我事先不知道每个名称的字符串长度,所以我必须遍历结果并动态分配(!)一个足够大的字符串来容纳每个名称。然后,我必须遍历每条记录。有更好的办法吗

int GetInDB(const char *query, cJSON **json)
{
    if(*json != NULL){
        cJSON_Delete(*json);
    }
    *json = cJSON_CreateArray();
    if (mysql_query(mysqldb, query))
    {
        fprintf(stderr, "%s\n", mysql_error(mysqldb));
        return -1;
    }
    MYSQL_RES *result = mysql_store_result(mysqldb);
    if (result == NULL)
    {
        fprintf(stderr, "%s\n", mysql_error(mysqldb));
        return -1;
    }
    int num_fields = mysql_num_fields(result);
    int i;
    MYSQL_ROW row;
    MYSQL_FIELD *field;
    char *Columns[num_fields];
    int which = 0;
    while((field = mysql_fetch_field(result)))
    {
        Columns[which] = (char*)malloc(strlen(field->name)+1);
        strcpy(Columns[which], field->name);
        which++;
    }
    while ((row = mysql_fetch_row(result)))
    {
        cJSON *obj = cJSON_CreateObject();
        for(i = 0; i < num_fields; i++)
        {
            cJSON_AddStringToObject(obj, Columns[i], row[i] ? row[i] : "NULL");
        }
        cJSON_AddItemToArray(*json,obj);
    }
    mysql_free_result(result);
    for(i=0; i<num_fields; i++){
        free(Columns[i]);
    }
    return 0;
}
int-GetInDB(const-char*query,cJSON**json)
{
如果(*json!=NULL){
cJSON_Delete(*json);
}
*json=cJSON_CreateArray();
if(mysql_查询(mysqldb,query))
{
fprintf(stderr,“%s\n”,mysql_错误(mysqldb));
返回-1;
}
MYSQL_RES*result=MYSQL_store_result(mysqldb);
如果(结果==NULL)
{
fprintf(stderr,“%s\n”,mysql_错误(mysqldb));
返回-1;
}
int num_fields=mysql_num_fields(结果);
int i;
MYSQL_行;
MYSQL_字段*字段;
字符*列[num_字段];
int=0;
而((field=mysql\u fetch\u field(result)))
{
列[which]=(char*)malloc(strlen(field->name)+1);
strcpy(列[which],字段->名称);
哪个++;
}
while((row=mysql\u fetch\u row(result)))
{
cJSON*obj=cJSON_CreateObject();
对于(i=0;i