Qt数据库操作问题疑问

时间:2021-06-09 10:59:11
   query.exec(QString("update DeviceView set signSelect='%1' where Address='%2'")

                              .arg("computer").arg(ip));

我在子线程里面执行这一句时,用打印出执行到这段代码耗时为几百个ms.请问是什么导致呢,我的数据是从网络接收到数据,然后再更新到数据库里面,以前也是这样写的,没有耗时那么高?坐=大神回答..感激不尽

4 个解决方案

#1


几百ms是包括了网络接收数据吗?如果是的话,肯定是在接收上面有点问题,至少,在更新数据库的过程我认为是不会又什么影响的

#2


1、本身数据库修改比查询消耗更多时间,尤其如果你涉及到修改很多条记录的时候
2、你如果把query一次编译多次运行会更快些。也就是:使用占位符,然后prepare.然后addBindValue来exec
3、大多数情况下,你的这个慢跟你目前的代码关系不大。跟逻辑,网络环境等有关系

#3


引用 1 楼 u011330815 的回复:
几百ms是包括了网络接收数据吗?如果是的话,肯定是在接收上面有点问题,至少,在更新数据库的过程我认为是不会又什么影响的

数据是来自于网络,但我在只打印那条数据库执行的时间,确实是用了几百毫秒,这应该不是跟网络来的数据有关了吧.?

#4


引用
query.exec(QString("update DeviceView set signSelect='%1' where Address='%2'")

                              .arg("computer").arg(ip));

这里没有打印的语句吧。
实际上我猜你打印语句应该在查询语句之后。
那么逐个分析瓶颈在哪儿。
QElapsedTimer可以帮助你。

#1


几百ms是包括了网络接收数据吗?如果是的话,肯定是在接收上面有点问题,至少,在更新数据库的过程我认为是不会又什么影响的

#2


1、本身数据库修改比查询消耗更多时间,尤其如果你涉及到修改很多条记录的时候
2、你如果把query一次编译多次运行会更快些。也就是:使用占位符,然后prepare.然后addBindValue来exec
3、大多数情况下,你的这个慢跟你目前的代码关系不大。跟逻辑,网络环境等有关系

#3


引用 1 楼 u011330815 的回复:
几百ms是包括了网络接收数据吗?如果是的话,肯定是在接收上面有点问题,至少,在更新数据库的过程我认为是不会又什么影响的

数据是来自于网络,但我在只打印那条数据库执行的时间,确实是用了几百毫秒,这应该不是跟网络来的数据有关了吧.?

#4


引用
query.exec(QString("update DeviceView set signSelect='%1' where Address='%2'")

                              .arg("computer").arg(ip));

这里没有打印的语句吧。
实际上我猜你打印语句应该在查询语句之后。
那么逐个分析瓶颈在哪儿。
QElapsedTimer可以帮助你。