我正在制作一个查询 MySQL 数据库的应用程序。
我希望将此结果存储在地图中(具有相应的对):
std::map<int, Car*> m_car;
typedef std::pair<int, Car*> m_car_pair;
汽车对象由 8 个参数组成,其中一个是 car_id 所以首先我提取汽车 ID 并将其用作键,然后我想将整个汽车对象存储为地图的值。(我知道这会让我存储 car_id 两次,但目前我不介意)。
无论如何,这是我的查询代码:
void DatabaseController::getAll(QString query_string)
{
// Console log message
std::cout << "Querying Database" << std::endl;
/// Declare SQL query and pass function parameter 'query'
QSqlQuery query(query_string);
// execute the query
query.exec();
int count = 0;
// While results are coming in
while(query.next())
{
// Call car constructor passing all parameters
Car car(query.value(count).toInt(), query.value(count+1).toString(), query.value(count+2).toString(), query.value(count+3).toString(),
query.value(count+4).toInt(), query.value(count+5).toInt(), query.value(count+6).toInt(), query.value(count+7).toString());
if (car.getcarID() != 0)
{
m_car_records.insert(m_car_pair(car.getcarID(), &car));
}
}
std::cout << "Database query finished" << std::endl;
在此之后,我做了一个快速测试函数来迭代地图并提取所有 ID(地图键)并检查它们是否不同(即函数有效)并且它们是。
但这只是一个检查,我需要的是能够从 car 调用应该在地图中的汽车对象的附件功能。所以我使用相同的快速测试函数来迭代地图和cout << car.toString();
(汽车类中的一个简单的字符串函数):
void DatabaseController::test()
{
m_car_records_iterator = m_car_records.begin();
for(unsigned int i = 0; i < m_car_records.size(); i++)
{
car *test = m_car_records_iterator->second;
std::cout << test->toString() << std::endl;
m_car_records_iterator++;
}
}
这显示了正确数量的结果,但是它们都是相同的,即添加到地图中每个条目的汽车对象是相同的(查询找到的最后一条记录的值)
我的问题是...
有什么方法可以使用我目前用于查询的这种结构,我可以在while循环中创建这些类对象并将其添加到我的地图中,每个对象都使用相同的名称,因为我当然不知道返回了多少结果并为每个对象声明一个类对象,但是就目前而言,使用相同的名称只是每次都添加相同的名称,而不是实际替换值……至少我认为这是正在发生的事情?
欢迎任何建议或想法(对不起,很长的帖子)