标题:【SQL输出】如何输出执行的SQL语句
作者:tanyue.esec
日期:2024-05-05 18:41
内容:
使用SqlQuery的查询语句,参数用占位符的方式进行替代,比如
SELECT * FROM sys_user WHERE ACCOUNT = :ACCOUNT
问题就在于,替代占位符之后的完整SQL语句拿不到,计划是将这个SQL操作记录下日志,方便在两个库之间做离线的数据同步。
不知道有没有办法能拿到替换占位符之后的SQL,或者干脆有更好的离线数据库同步的解决方式。
#1 [angelus 05-06 09:24]
可以看下这个函数,但它设计初衷是为了调试
QString QSqlQuery::executedQuery() const
#2 [liudianwu 05-07 08:39]
楼上正解
#3 回 angelus 的帖子 [tanyue.esec 05-07 09:40]
angelus:可以看下这个函数,但它设计初衷是为了调试
QString QSqlQuery::executedQuery() const
(2024-05-06 09:24)
试了一下,还是一样的效果,拿不到那个最终代入占位符参数的那个SQL
难道是因为用的是ODBC的原因?
#4 回 tanyue.esec 的帖子 [angelus 05-10 10:06]
tanyue.esec:试了一下,还是一样的效果,拿不到那个最终代入占位符参数的那个SQL
难道是因为用的是ODBC的原因? (2024-05-07 09:40)
看来这个函数和它的说明不匹配,你可以尝试牺牲一点性能来完成这个功能
QString getLastExecutedQuery(const QSqlQuery& query)
{
QString sql = query.lastQuery();
const int nbBindValues = query.boundValues().size();
for(int i = 0, j = 0; j < nbBindValues; ++j)
{
i = sql.indexOf(QLatin1Char('?'), i);
if (i formatValue(field);
sql.replace(i, 1, formatV);
i +=..
#5 回 angelus 的帖子 [tanyue.esec 05-16 09:04]
angelus:看来这个函数和它的说明不匹配,你可以尝试牺牲一点性能来完成这个功能
QString getLastExecutedQuery(const QSqlQuery& query)
{
QString sql = query.lastQuery();
....... (2024-05-10 10:06)
完美啊