C:MySQL SELECT的动态resultSet

时间:2011-05-12 15:12:46

标签: mysql c select

我正在将多维char数组传递给我的MySQL函数。 cmd包含命令,resultSet [2] [50]是我的数组。

如何让它更具动态性,以便我能够检索到我想要的任意数量的项目?

int
selectDB(char * cmd, char resultSet[2][50])
{
    MYSQL *conn;
    MYSQL_RES *result;
    MYSQL_ROW row;
    int i;
    char *c1;

    conn = mysql_init(NULL);

    if (conn == NULL) {
        printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
        exit(1);
    }

    if (mysql_real_connect(conn, "localhost", "root",
    "mypassword", "myDBName", 0, NULL, 0) == NULL)
    {
        printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
        exit(1);    
    }

    if (mysql_query(conn, cmd)) 
    {
        printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
        exit(1);
    }

    if (!(result = mysql_store_result(conn)))
   {
        printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
        exit(1);
    }   
    while((row = mysql_fetch_row(result))) {
        for (i=0 ; i < mysql_num_fields(result); i++)               
                {
                snprintf(resultSet[i], 999, "%s", row[i]);      
                }

    }

    if (!mysql_eof(result))
    {
        printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
        exit(1);
    }

   mysql_free_result(result);   
    mysql_close(conn);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

你可以接受一个三指针作为这样的参数和int,它将告诉数组的大小

int selectDB( char* cmd, char*** resultSet, int* m, int* n )
{
    // allocate two dimentional array with any size you want, using malloc
    // store the size into m and n
    // do stuff with resultSet
    // watch out when using snprintf - check if i is smaller
    // than the size of the array. If so - just use snprintf
    // otherwise, you'll need to allocate some larger memory, 
    // and copy "move" the current records into the new location
    // then free the old memory, etc.
    // 
    // return
}

这样你就可以知道数组的大小,但你需要处理释放内存,为resultSet分配。