gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:39:37 25 4
gpt4 key购买 nike

出于测试目的,我试图在实际运行之前从 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() 参数字符串。

最佳答案

查看 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是一个私有(private)的QSqlQueryPrivate对象。所以我想说从那里获取字符串可能很复杂。

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

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

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

我不认为这是一个“干净”的解决方案,但它可能对您有所帮助。

关于c++ - QSqlQuery:在执行前获取准备好的语句字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32456084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com