文档在这个问题上有点模糊:
清除结果集并释放查询持有的所有资源。将查询状态设置为非活动状态。你应该很少需要调用这个函数。
指示数据库驱动程序在重新执行之前不会从此查询中获取更多数据。通常不需要调用此函数,但如果您打算稍后重新使用查询,则可能有助于释放锁或游标等资源。
将查询设置为非活动状态。绑定值保留其值。
一个人是否意味着另一个?在每种情况下将释放哪些资源?为什么我会使用一个而不是另一个?
我认为这个想法很清楚,功能并不相互暗示。第一个确实清除了一切:
清除结果集并释放查询持有的所有资源
之后,您将无法获得有关此查询的任何信息,而第二个只是将查询标记为非活动状态(好吧,它只是“说”它是空的)并准备好查询以备查询
绑定值保留其值
这意味着在执行finish()
之后仍然可以访问至少一些数据。
如果你不想创建另一个QSqlQuery
对象并想要执行一个完全不同的查询,那么你可以使用clear()
而不是害怕任何内存泄漏或其他东西。但是,如果您计划稍后执行相同的查询,例如使用另一组绑定值,则可以使用finish()
。它还将释放一些驱动程序的内部资源(正如文档中所述)。