Qt清除SQL查询

Qt清除SQL查询,qt,Qt,两者的区别是什么 void QSqlQuery::clear () 及 基于这一点,我看不出区别是什么。有什么区别?我想知道具体什么时候使用一个而不是另一个 编辑-从文档中获取更多详细信息。 清除() -清除结果集并释放查询持有的所有资源。 听起来finish()也一样 -将查询状态设置为非活动。 完成也一样 finish() -指示数据库驱动程序在重新执行该查询之前,不会从该查询中提取更多数据。 这具体意味着什么?这样做的后果是什么 -如果您打算在以后重新使用查询,释放锁或游标等资源可能会有

两者的区别是什么

void QSqlQuery::clear ()

基于这一点,我看不出区别是什么。有什么区别?我想知道具体什么时候使用一个而不是另一个

编辑-从文档中获取更多详细信息。
清除()
-清除结果集并释放查询持有的所有资源。
听起来finish()也一样

-将查询状态设置为非活动。
完成也一样

finish()
-指示数据库驱动程序在重新执行该查询之前,不会从该查询中提取更多数据。
这具体意味着什么?这样做的后果是什么

-如果您打算在以后重新使用查询,释放锁或游标等资源可能会有所帮助。
你不明白吗?不清除释放锁、游标等吗

-将查询设置为非活动。
我相信clear也是这样做的

-绑定值保留其值。

这有什么意义

Qt附带源代码,您只需查看

因此,根据源代码:

  • 清除-清除并重置QSqlQuery对象
  • 完成-将当前查询的成员重置为非活动状态

希望这能有所帮助,向所有像我一样想知道调用哪个方法的人致意。我将分享我的研究成果

注意:我阅读了SQLite驱动程序的源代码,因此其他数据库驱动程序可能会有所不同

  • finish()重置语句;在SQLite上下文中,它调用
    sqlite3_reset
  • clear()重置整个QSqlQuery对象;它清除绑定值、准备语句、lastError()、lastQuery()…,为所有对象的参数设置默认选项;在SQLite上下文中,我认为
    sqlite3\u finalize
    也被称为

所以我应该把它想象成
finish
。在finish()之后可以调用exec()重新执行查询,但在clear()之后在成功重新执行查询之前,必须再次预处理查询并绑定其值。

用于描述这些函数的语言类似,因此肯定会有点混乱,我希望这一解释能有所帮助。下面是我如何解释和使用这些方法

void QSqlQuery::finish ()
我认为这是一种表示我已经完成了我刚才请求的查询(例如不再阅读/迭代)的方式,但我仍然计划使用QSqlQuery对象来做更多的工作。您只需释放用于从上一个查询中获取值的所有内存/资源。当你一遍又一遍地处理大型数据集时,这只会带来巨大的、明显的不同,但我认为使用这些数据集是一个很好的实践

void QSqlQuery::clear ()
这是我的说法,我已经处理完QSqlQuery对象,我想保证在处理该对象时,我使用的所有资源/内存都不会留下。我很少使用,因为我发现它的有效性可以根据你使用的数据库而变化很大,如果你使用现代C++特性,它对你来说没有多大作用。 如果您将它们看作是为了在两个不同的时间段内解决一个类似的问题而编写的(例如旧的C代码与现代的C++相反),则更容易理解它们之间的差异


它们的功能非常相似,但我建议您只使用finish()

谢谢。老实说,我仍然不知道有什么区别。这里使用的语言是如此的通用和抽象,对我来说没有任何意义。“重置结果成员”对我来说没有任何意义。如果它们的意思是返回的results(QSqlQuery还充当迭代器),那么.clear()不也是这样做的吗?我认为是这样。此外,它们似乎都将查询设置为非活动状态。“清除并重置查询”与finish()有什么不同?这只是诺基亚的胡言乱语。我想知道什么时候使用一个而不是另一个。它们是不同的,因为clear重置整个对象,而finish只重置其结果成员。Qt文档可能不够清晰,但是(正如我所说)您总是有源代码可以查看,我相信它比任何文档都好。顺便说一句,在这两种情况下,文档都提到您很少需要调用这些函数,这解释了为什么Qt团队没有花很多时间来记录它们
void QSqlQuery::clear ()