首页 文章

Qt清除SQL查询

提问于
浏览
3

有什么区别

void QSqlQuery::clear ()

void QSqlQuery::finish ()

基于documentation,我不想具体知道何时使用一个而不是另一个 .

EDIT - Some more elaboration and info from documentation.
clear()

  • 清除结果集并释放查询持有的所有资源 .
    听起来像finish()也一样......

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

finish()

  • 指示数据库驱动程序,在重新执行之前,不会从此查询中获取更多数据 .
    具体是什么意思?这是什么后果?

  • 如果您打算稍后重新使用查询,则可能有助于释放锁或游标等资源 .
    不清楚释放锁,游标等吗?

  • 将查询设置为非活动状态 .
    我相信清楚也是如此 .

  • Value 保留其 Value .
    这有什么意义?

3 回答

  • 2

    对于所有人,像我一样,想知道调用哪种方法 . 我将分享我的研究成果 .

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

    • finish() 重置声明;在SQLite上下文中,它调用 sqlite3_reset ;

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

    所以我应该把它想象成 finish < clear . 在 finish() 之后,您可以调用exec()来重新执行查询,但是在 clear() 之后,您必须再次预先查询并绑定其值,然后才能成功重新执行查询 .

  • 5

    Qt附带源代码,您可以通过简单地查看qsqlquery.cpp file来了解有什么区别

    所以根据源代码:

    • clear - 清除并重置QSqlQuery对象;

    • 完成 - 将当前查询的result成员重置为非活动状态;

    希望这有帮助,问候

  • 0

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

    void QSqlQuery::finish ()
    

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

    void QSqlQuery::clear ()
    

    这是我的方式,我已经完成了QSqlQuery对象,并希望保证在我处理对象时,我正在使用的资源/内存都没有留下来 . 我很少,如果有的话,使用它,因为我发现它的效果可能因你使用的数据库而有很大差异,如果你使用的是现代C功能,它对你没有太大作用 .

    如果你把它们看成是为了解决两个不同时期的类似问题(例如旧C代码而不是现代C代码)而更容易理解差异 .

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

相关问题