c ++,从数据库结果创建结构

时间:2013-04-17 09:57:54

标签: c++ mysql windows

我正在尝试从数据库结果创建结构。有什么简单的方法可以做到这一点? 我希望得到这样的东西:(这是一个不起作用的小例子。我把它放在一切都清楚了)

struct ROWSTRUCTURE
{
    int ID;
    std::string test;
};

enum ROWSTRUCTURE_FIELD_ENUM_end
{
    ROWSTRUCTURE_FIELD_ENUM_ID,
    ROWSTRUCTURE_FIELD_ENUM_test,
    ROWSTRUCTURE_FIELD_ENUM_end
};

list<ROWSTRUCTURE> getData()
{
    MYSQL_ROW row; 
    MYSQL_RES *res_set;

    mysql_query(connect,"SELECT * FROM `example`;");
    res_set = mysql_store_result(connect);

    while ((row = mysql_fetch_row(res_set)) != NULL)
    {
        ROWSTRUCTURE StructToAdd;

        for( int i = 0; i < ROWSTRUCTURE_FIELD_ENUM_end; i++)
            StructToAdd[i] = row[i]; //ERROR
    }

    delete res_set;
}

我怎样才能以正确的方式做到这一点?

1 个答案:

答案 0 :(得分:0)

您正在寻找的是一种称为“反射”的东西,其中变量,成员字段等的名称可用于指代实际的变量/字段或其他。 C ++不支持这一点。你需要以其他方式解决这个问题......一个看似合理的解决方案是:

StructToAdd.ID = strtol(row[ROWSTRUCTURE_FIELD_ENUM_ID]);
StructToAdd.test = row[ROWSTRUCTURE_FIELD_ENUM_test];

或者,正如评论所暗示的那样:

struct ROWSTRUCTURE
{
    int ID;
    std::string test;
    ROWSTRUCTURE operator=(const MYSQL_ROW &row)
    {
        ID = strtol(row[ROWSTRUCTURE_FIELD_ENUM_ID]);
        test = row[ROWSTRUCTURE_FIELD_ENUM_test];
        return *this;
    }
};

然后在“main”函数中:

StructToAdd = row;