之间有什么区别
void QSqlQuery::clear ()
和
void QSqlQuery::finish ()
基于documentation,我看不出差异是什么。有什么不同?我想具体知道何时使用其中一个。
编辑 - 文档中的更多详细说明和信息。
清除()
- 清除结果集并释放查询所拥有的任何资源
听起来像finish()也一样......
- 将查询状态设置为非活动状态 完成同样的事情。
完成()
- 指示数据库驱动程序,在重新执行之前,不会再从此查询中获取任何数据。
具体是什么意思?这是什么后果?
- 如果您打算稍后重新使用查询,可能会有助于释放锁或游标等资源。
不清楚做同样的事吗?不清除释放锁,游标等?
- 将查询设置为无效。
我相信清楚也是如此。
- 边值保留其值 这有什么意义?
答案 0 :(得分:5)
Qt附带源代码,只需查看qsqlquery.cpp file
即可看出有什么区别所以根据源代码:
希望这有帮助,尊重
答案 1 :(得分:2)
用于描述这些功能的语言是类似的,所以它肯定会有点混乱,我希望这个解释有所帮助。以下是我如何解释和使用这些方法。
void QSqlQuery::finish ()
我认为这是一种说法,我已经完成了我刚刚请求的查询(例如,没有更多的阅读/迭代),但我仍然计划使用该QSqlQuery对象来完成更多工作。您只是释放用于从上一个查询中获取值的任何内存/资源。当你一遍又一遍地处理大型数据集时,这只会产生很大的显着差异,但我认为使用它不是一种好的做法。
void QSqlQuery::clear ()
这是我说的方式,我已经完成了QSqlQuery对象,并希望保证在我处理对象时没有留下任何资源/内存。我很少(如果有的话)使用它,因为我发现它的有效性可能因您使用的数据库而有很大差异,如果您使用的是现代C ++功能,它不会做很多你。
如果你把它们看成是为了解决两个不同时期的类似问题(例如旧的C代码而不是现代的C ++)而更容易理解差异。
他们做的事非常相似,但我建议您只使用完成()。
答案 2 :(得分:0)
对于所有人,像我一样,想知道调用哪种方法。我将分享我的研究成果。
注意:我阅读了SQLite驱动程序的源代码,因此其他数据库驱动程序可能不同。
sqlite3_reset
; sqlite3_finalize
也被称为所以我应该像finish < clear
那样想象它。在 finish()之后,您可以调用exec()来重新执行查询,但在 clear()之后,您必须再次预先查询并绑定其值,然后才能成功重新执行查询。