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

c++, create structs from a database result

本文关键字:创建 结构体 结果 数据库 c++      更新时间:2023-10-16

我试图从数据库结果创建结构。有什么简单的方法可以做到这一点?我想得到这样的东西:(这是一个不工作的小例子。我放这个是为了让一切都清楚)

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;
}

我怎样才能用正确的方法做这件事?

您正在寻找的是所谓的"反射",其中变量,成员字段等名称可用于引用实际的变量/字段或任何东西。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;