该文档对此主题含糊不清:
从void QSqlQuery::clear():
从void QSqlQuery::finish():
一个暗示另一个吗?在每种情况下将释放哪些资源?我为什么要使用一个而不是另一个?
最佳答案
我认为这个想法很明确,功能并不相互暗示。第一个清除所有内容:
之后,您将无法获得有关此查询的任何信息,而第二个查询只是将查询标记为非 Activity 状态(好吧,它只是“说”它为空)并准备好查询
这意味着在执行
finish()
之后至少仍可以访问某些数据。如果您不想创建另一个
QSqlQuery
对象并想执行一个完全不同的查询,则可以使用clear()
而不必担心任何内存泄漏或其他问题。但是,如果您打算稍后再执行同一查询,例如使用另一组绑定(bind)值,则可以使用finish()
。它还将释放一些驱动程序的内部资源(如文档中所述)。