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