QSqlQuery:在执行前获取准备好的语句字符串
QSqlQuery: get prepared statement string before execution
出于测试目的,我试图在实际 运行 它之前从 QSqlQuery
对象中获取准备好的语句字符串。
我检查了 lastQuery()
和 executedQuery()
方法,但其中 none 有效。
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()
参数字符串。
q.executedQuery();
请return准备查询。
查看 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
方法来在任何给定时间检索值。
我认为这不是 'clean' 解决方案,但它可能对您有所帮助。
出于测试目的,我试图在实际 运行 它之前从 QSqlQuery
对象中获取准备好的语句字符串。
我检查了 lastQuery()
和 executedQuery()
方法,但其中 none 有效。
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()
参数字符串。
q.executedQuery();
请return准备查询。
查看 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
方法来在任何给定时间检索值。
我认为这不是 'clean' 解决方案,但它可能对您有所帮助。