Qt5中的void QSqlQuery :: clear()和void QSqlQuery :: finish()有什么区别?

问题描述 投票:1回答:1

文档在这个问题上有点模糊:

来自void QSqlQuery::clear()

清除结果集并释放查询持有的所有资源。将查询状态设置为非活动状态。你应该很少需要调用这个函数。

来自void QSqlQuery::finish()

指示数据库驱动程序在重新执行之前不会从此查询中获取更多数据。通常不需要调用此函数,但如果您打算稍后重新使用查询,则可能有助于释放锁或游标等资源。

将查询设置为非活动状态。绑定值保留其值。

一个人是否意味着另一个?在每种情况下将释放哪些资源?为什么我会使用一个而不是另一个?

c++ qt qt5 qsqlquery
1个回答
2
投票

我认为这个想法很清楚,功能并不相互暗示。第一个确实清除了一切:

清除结果集并释放查询持有的所有资源

之后,您将无法获得有关此查询的任何信息,而第二个只是将查询标记为非活动状态(好吧,它只是“说”它是空的)并准备好查询以备查询

  1. 重新执行
  2. 清除

绑定值保留其值

这意味着在执行finish()之后仍然可以访问至少一些数据。

如果你不想创建另一个QSqlQuery对象并想要执行一个完全不同的查询,那么你可以使用clear()而不是害怕任何内存泄漏或其他东西。但是,如果您计划稍后执行相同的查询,例如使用另一组绑定值,则可以使用finish()。它还将释放一些驱动程序的内部资源(正如文档中所述)。

© www.soinside.com 2019 - 2024. All rights reserved.