有什么区别
void QSqlQuery::clear ()
和
void QSqlQuery::finish ()
基于documentation,我不想具体知道何时使用一个而不是另一个 .
EDIT - Some more elaboration and info from documentation.
clear()
-
清除结果集并释放查询持有的所有资源 .
听起来像finish()也一样...... -
将查询状态设置为非活动状态 .
完成也一样 .
finish()
-
指示数据库驱动程序,在重新执行之前,不会从此查询中获取更多数据 .
具体是什么意思?这是什么后果? -
如果您打算稍后重新使用查询,则可能有助于释放锁或游标等资源 .
不清楚释放锁,游标等吗? -
将查询设置为非活动状态 .
我相信清楚也是如此 . -
Value 保留其 Value .
这有什么意义?
3 回答
对于所有人,像我一样,想知道调用哪种方法 . 我将分享我的研究成果 .
注意:我读取了SQLite驱动程序的源代码,因此其他数据库驱动程序可能不同 .
finish() 重置声明;在SQLite上下文中,它调用
sqlite3_reset
;clear() 重置整个 QSqlQuery 对象;它清除绑定值,预处理语句,lastError(),lastQuery()...,设置所有对象参数的默认选项;在SQLite上下文中我认为
sqlite3_finalize
也被调用;所以我应该把它想象成
finish < clear
. 在 finish() 之后,您可以调用exec()来重新执行查询,但是在 clear() 之后,您必须再次预先查询并绑定其值,然后才能成功重新执行查询 .Qt附带源代码,您可以通过简单地查看qsqlquery.cpp file来了解有什么区别
所以根据源代码:
clear - 清除并重置QSqlQuery对象;
完成 - 将当前查询的result成员重置为非活动状态;
希望这有帮助,问候
用于描述这些功能的语言是类似的,所以它肯定会有点混乱,我希望这个解释有所帮助 . 这是我如何解释和使用这些方法 .
我认为这是一种说法,我已经完成了我刚刚请求的查询(例如,没有更多的阅读/迭代),但我仍然计划使用该QSqlQuery对象做更多的工作 . 您只是释放用于从上一个查询中获取值的任何内存/资源 . 当你一遍又一遍地处理大型数据集时,这实际上只会产生一个巨大而显着的差异,但我认为这是一个很好的做法 .
这是我的方式,我已经完成了QSqlQuery对象,并希望保证在我处理对象时,我正在使用的资源/内存都没有留下来 . 我很少,如果有的话,使用它,因为我发现它的效果可能因你使用的数据库而有很大差异,如果你使用的是现代C功能,它对你没有太大作用 .
如果你把它们看成是为了解决两个不同时期的类似问题(例如旧C代码而不是现代C代码)而更容易理解差异 .
他们做的非常相似,但我建议你只使用 finish() .