C++,从数据库结果创建结构
我正在尝试从数据库结果创建结构。做这件事的简单方法是什么? 我想得到这样的结果:这是一个不起作用的小例子。我放这个是为了让一切都清楚C++,从数据库结果创建结构,c++,mysql,windows,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
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;
}
};
然后在主功能中:
StructToAdd = row;
在执行任何转换需要执行的操作时,逐个指定字段?不太确定要在此处执行什么操作。ID和测试应该包含什么?@永远我想在最后返回这些东西的列表。我没有做那个零件。@Joachim Pileborg我想做那个过程automatically@Ordo你不能自动完成这个过程。您可以在类中为MYSQL\u行重载operator=并在其中分配字段。