Qt清除SQL查询

时间:2011-04-03 17:56:38

标签: qt

之间有什么区别
void QSqlQuery::clear ()

void QSqlQuery::finish ()

基于documentation,我看不出差异是什么。有什么不同?我想具体知道何时使用其中一个。

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

- 将查询状态设置为非活动状态 完成同样的事情。

完成()
- 指示数据库驱动程序,在重新执行之前,不会再从此查询中获取任何数据。
具体是什么意思?这是什么后果?

- 如果您打算稍后重新使用查询,可能会有助于释放锁或游标等资源。
不清楚做同样的事吗?不清除释放锁,游标等?

- 将查询设置为无效。
我相信清楚也是如此。

- 边值保留其值 这有什么意义?

3 个答案:

答案 0 :(得分:5)

Qt附带源代码,只需查看qsqlquery.cpp file

即可看出有什么区别

所以根据源代码:

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

希望这有帮助,尊重

答案 1 :(得分:2)

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

void QSqlQuery::finish ()

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

void QSqlQuery::clear ()

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

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

他们做的事非常相似,但我建议您只使用完成()

答案 2 :(得分:0)

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

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

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

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