我正在尝试确定在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,然后反复使用相同的实例?
发布于 2011-04-14 22:40:21
好的,想法是你必须在堆上创建QSqlQuery,准备查询,并使用它执行以下操作:
使用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;
}https://stackoverflow.com/questions/5609245
复制相似问题