Qt嵌套QsqlQuery无法正常工作

时间:2017-03-23 13:58:36

标签: c++ sql qt sqlite

我有以下问题:

我尝试执行两个嵌套查询但在执行secon查询后,第一个查询的结果被删除或者其他。

实施例: 我在items表中有两个项目,在lendings表中有两个条目。 第一个查询将结果保存这两个项目,但在执行基于第一个项目的第二个查询后,sqlQuery.next()方法不再提供第二个项目。

我希望这是可以理解的,对不起!

这是从sqlite数据库加载项目的方法:

ItemsList *DatabaseManager::getAllItems() {

this->db.open();

ItemsList* fetchedItems = new ItemsList();
QSqlQuery sqlQuery;

if (sqlQuery.exec("SELECT * FROM items ORDER BY name COLLATE NOCASE")) {
    while (sqlQuery.next()) {
        Item* fetchedItem = new Item();

        fetchedItem->setItemId(sqlQuery.value(0).toInt());
        fetchedItem->setName(sqlQuery.value(1).toString());
        addLendingsToItem(fetchedItem);

        ItemNode* fetchedItemNode = new ItemNode(fetchedItem);
        fetchedItems->add(fetchedItemNode);
    }
} else {
    qDebug() << sqlQuery.lastQuery();
    qDebug() << sqlQuery.lastError().text();
}
if (this->db.isOpen()) {
    this->db.close();
}
return fetchedItems; }

这是保存第二个查询的方法:

void DatabaseManager::addLendingsToItem(Item* fetchedItem) {

QSqlQuery sqlQuery;
sqlQuery.prepare("SELECT i.itemId, i.name, l.lent, l.personId FROM items i JOIN lendings l ON i.itemId = l.itemId WHERE i.itemId = :itemId");               sqlQuery.bindValue(":itemId", fetchedItem->getItemId());
sqlQuery.bindValue(":itemId", fetchedItem->getItemId());

if (sqlQuery.exec()) {
    while (sqlQuery.next()) {
        if (sqlQuery.value(2).toInt() == 1) {
            fetchedItem->setPerson(getPerson(sqlQuery.value(3).toInt()));
            fetchedItem->setIsLent(true);
        } else {
            fetchedItem->getLentByList()->add(new PersonNode(getPerson(sqlQuery.value(3).toInt())));
        }
    }
} else {
    qDebug() << sqlQuery.lastQuery();
    qDebug() << sqlQuery.lastError().text();
} }

0 个答案:

没有答案