Язык, используемый для описания этих функций, похож, поэтому он может быть немного запутанным, и я надеюсь, что это объяснение поможет. Вот как я интерпретирую и использую эти методы.
void QSqlQuery::finish ()
Я думаю об этом как о способе сказать, что я закончил с запросом, который я только что запросил (например, больше не читал / не повторял), но я все еще планирую использовать этот объект QSqlQuery для выполнения дополнительной работы. Вы просто освобождаете любую память / ресурсы, используемые для получения значений из предыдущего запроса. Это действительно имеет большое, заметное значение, когда вы имеете дело с большими наборами данных снова и снова, но я считаю хорошей практикой использовать все же.
void QSqlQuery::clear ()
Это мой способ сказать, что я закончил с объектом QSqlQuery и хочу гарантировать, что ни один из ресурсов / памяти, которые я использовал, не останется, пока я избавляюсь от объекта. Я редко, если вообще когда-либо, использую это, поскольку я обнаружил, что его эффективность может широко варьироваться в зависимости от базы данных, которую вы используете, и если вы используете современные функции C ++, это мало что для вас делает.
Разницу легче понять, если рассматривать ее как написанную для решения аналогичной проблемы в течение двух разных периодов времени (например, старый код C в отличие от современного C ++).
Они делают очень похожие вещи, но я бы рекомендовал вам использовать finish () .