【问题标题】:Qt clearing an SQL queryQt 清除 SQL 查询
【发布时间】:2015-11-25 02:20:52
【问题描述】:

有什么区别

void QSqlQuery::clear ()

void QSqlQuery::finish ()

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

编辑 - 来自文档的更多详细说明和信息。
clear()
- 清除结果集并释放查询持有的所有资源。
听起来像 finish() 一样......

-将查询状态设置为非活动状态。
完成也是如此。

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

-如果您打算稍后重用查询,这可能有助于释放锁或游标等资源。
不明白也一样吗?不清除释放锁、游标等?

-将查询设置为非活动状态。
我相信 clear 也是如此。

-绑定值保留其值。
这有什么意义?

【问题讨论】:

    标签: qt


    【解决方案1】:

    Qt自带源码,看qsqlquery.cpp file就知道有什么区别了

    所以根据源码:

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

    希望这会有所帮助,问候

    【讨论】:

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

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

    void QSqlQuery::finish ()
    

    我认为这是表示我已经完成了我刚刚请求的查询(例如不再阅读/迭代)但我仍然计划使用该 QSqlQuery 对象来完成更多工作。您只是释放用于从上一个查询中获取值的任何内存/资源。当您一遍又一遍地处理大型数据集时,这确实会产生很大的显着差异,但我认为这是一种很好的做法。

    void QSqlQuery::clear ()
    

    这是我的说法,我已经完成了 QSqlQuery 对象,并希望保证在我处理对象时,我使用的任何资源/内存都不会留下。我很少(如果有的话)使用它,因为我发现它的有效性可能会因您使用的数据库而有很大差异,而且如果您使用的是现代 C++ 功能,它对您的作用并不大。

    如果您将它们看作是为解决两个不同时间段的类似问题而编写的(例如,旧的 C 代码与现代 C++ 相比),则更容易理解差异。

    他们做的事情非常相似,但我建议你只使用 finish()

    【讨论】:

      【解决方案3】:

      对于所有像我一样想知道调用哪个方法的人。我将分享我的研究。

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

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

      所以我应该像 finish < clear 那样形象化它。在 finish() 之后,您可以调用 exec() 重新执行查询,但在 clear() 之后,您必须再次准备查询并绑定其值,然后才能成功重新执行查询。

      【讨论】:

        猜你喜欢
        • 2010-12-24
        • 2012-05-20
        • 2018-07-09
        • 1970-01-01
        • 1970-01-01
        • 2021-01-21
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        相关资源
        最近更新 更多