我正在尝试确定在 QSqlQuery 中使用准备好的语句的正确方法。文档在这个主题上不是很具体。

void select(const QSqlDatabase &database) {
    QSqlQuery query(database);
    query.prepare("SELECT * FROM theUniverse WHERE planet = :planet");
    query.bindValue(":planet", "earth");
    query.exec();
}

那么这个片段会在连接 database 中创建一个永久的准备好的语句吗?这个准备好的语句会在对 select() 的调用之间保持不变,即当函数返回并处理 QSqlQuery query 时它会被保存吗?

或者我应该在堆上创建 QSqlQuery 并一遍又一遍地使用相同的实例?

最佳答案

好的,这个想法是你必须在堆上创建 QSqlQuery,准备查询并使用它执行以下操作:

  • QSqlQuery::bindValue(s)
  • QSqlQuery::exec
  • 使用 QSqlQuery::[next|first|last|...]
  • 读取数据
  • QSqlQuery::finish
  • 冲洗并重复

  • 以下剪辑对于在堆上创建、准备和检索查询很有用:
    QSqlDatabase database;
    QMap<QString, QSqlQuery *> queries; //dont forget to delete them later!
    
    QSqlQuery *prepareQuery(const QString &query)
    {
        QSqlQuery *ret = 0;
            if (!queries.contains(query)) {
                QSqlQuery *q = new QSqlQuery(database);
                q->prepare(query);
                queries[query] = ret = q;
            } else {
                ret = queries[query];
            }
        }
        return ret;
    }
    

    关于sql - QSqlQuery 准备好的语句 - 正确使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5609245/

    10-11 06:24