文档在主题上有点模糊:
从void QSqlQuery::clear((:
清除结果集并释放查询所占用的所有资源。将查询状态设置为非活动状态。如果需要的话,你应该很少调用此函数。
从void QSqlQuery::finish((:
指示数据库驱动程序不再从中提取数据此查询,直到重新执行为止。通常不需要打电话这个功能,但它可能有助于释放这样的资源如果以后打算重用查询,则将其作为锁或游标。
将查询设置为非活动。绑定值保留其值。
一个暗示另一个吗?在每种情况下都会释放哪些资源?为什么我要用一个而不是另一个?
我认为这个想法相当清晰,函数之间并不相互暗示。第一个可以清除一切:
清除结果集并释放查询所拥有的所有资源
在那之后,你将无法获得关于这个查询的任何信息,而第二个查询只是将查询标记为非活动(好吧,它只是"说"它是空的(,并准备将查询作为
- 重新执行
- 已清除
绑定值保留其值
这意味着在finish()
的执行之后,至少一些数据仍然是可访问的。
如果您不想创建另一个QSqlQuery
对象,并且想执行一个完全不同的查询,那么您可以使用clear()
,而不必担心任何内存泄漏或其他问题。但是,如果您计划稍后执行相同的查询,例如使用另一组绑定值,则可以使用finish()
。它还将发布一些驱动程序的内部资源(正如文档中所说(。