QSqlQuery:在执行之前获取准备好的语句字符串

时间:2015-09-08 11:02:36

标签: c++ qt qsqlquery qtsql

出于测试目的,我试图在实际运行它之前从QSqlQuery对象中获取准备好的语句字符串。

我检查了lastQuery()executedQuery()方法,但都没有。

void foo(QSqlQuery& q)
{
    QString statement = q.lastQuery();
    // statement is empty unless exec() is called
}

QSqlQuery q(myDb);
q.prepare("SELECT * FROM Foo;");
foo(q);

我想要一种方法来取回prepare()参数字符串。

2 个答案:

答案 0 :(得分:2)

看一下Qt源代码,我发现字符串最终以prepare方式结束:

...
if (query.isEmpty()) {
    qWarning("QSqlQuery::prepare: empty query");
    return false;
}
#ifdef QT_DEBUG_SQL
    qDebug("\n QSqlQuery::prepare: %s",query.toLocal8Bit().constData());
#endif
return d->sqlResult->savePrepare(query);

其中sqlResult是私有QSqlQueryPrivate对象。所以我想说从那里获取字符串可能很复杂。

然而,我想到了一个解决方案。子类QSqlQuery,设置将保存预准备语句的QString属性。然后重新定义QSqlQuery::prepare(),以便将值存储在属性中,然后执行原始作业:

bool TestQSqlQuery::prepare(const QString& query){
    this->m_preparedQuery = query;
    return QSqlQuery::prepare(query);
}

然后创建一个getPreparedQuery方法以在任何给定时间检索值。

我不认为这是一个干净的'解决方案,但它可能会帮助你。

答案 1 :(得分:-1)

q.executedQuery();

将返回准备好的查询。