首页 文章

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

提问于
浏览
1

文档在这个主题上有点含糊:

来自void QSqlQuery::clear()

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

来自void QSqlQuery::finish()

指示数据库驱动程序在重新执行之前不会从此查询中获取更多数据 . 通常不需要调用此函数,但如果您打算稍后重新使用查询,则可能有助于释放锁或游标等资源 . 将查询设置为非活动状态 . 绑定值保留其值 .

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

1 回答

  • 2

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

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

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

    • 重新执行

    • 清除

    绑定值保留其值

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

    如果您不想创建另一个 QSqlQuery 对象并且想要执行完全不同的查询,那么您可以使用 clear() 并且不要害怕任何内存泄漏或其他内容 . 但是,如果您计划稍后执行相同的查询,例如使用另一组绑定值,则可以使用 finish() . 它还将发布一些驱动程序's internal resources (as it' s在文档中说 .

相关问题