天天看点

Qt QString使用arg存在的陷阱

文章目录

  • ​​0 结果​​
  • ​​1 原因​​
  • ​​2 解决方法​​

0 结果

错误复现:

QString sql = QString("SELECT ComName FROM ComInfo WHERE ComCode LIKE \'%%1%\' LIMIT %2 OFFSET %3").arg("0107").arg(50).arg(0);
    qDebug()<<"sql:"<<sql;      

打印结果:

Qt QString使用arg存在的陷阱

1 原因

​\'%%1%\'​

​​中的第一个​

​%​

​​和​

​"0107"​

​​发生作用,导致原本​

​%1​

​​应该被替换为0107倍替换成了5007,也就是第二个被替换的50倍替换到了01的部分,第二个​

​%2​

​替换了原本应该第三个替换的0.

2 解决方法

把​

​LIMIT %2 OFFSET %3​

​这部分单独用一个QString存储,然后拼接即可。

QString sql = QString("SELECT ComName FROM ComInfo WHERE ComCode LIKE \'%%1%\'").arg("0107") + QString(" LIMIT %2 OFFSET %3").arg(50).arg(0);