В чем разница между void QSqlQuery :: clear () и void QSqlQuery :: finish () в Qt5?

Документация по этому поводу расплывчата:

Из void QSqlQuery :: clear ():

Очищает набор результатов и освобождает все ресурсы, удерживаемые запросом. Устанавливает состояние запроса в неактивное. Вам следует редко, если вообще когда-либо, вызывать эту функцию.

Из void QSqlQuery :: finish ():

Сообщите драйверу базы данных, что из этого запроса больше не будут извлекаться данные до его повторного выполнения. Обычно нет необходимости вызывать эту функцию, но она может быть полезна для освобождения ресурсов, таких как блокировки или курсоры, если вы собираетесь повторно использовать запрос в более позднее время.

Устанавливает запрос в неактивный. Связанные значения сохраняют свои значения.

Одно подразумевает другое? Какие ресурсы будут освобождены в каждом случае? Почему я должен использовать один вместо другого?


person Lennart Rolland    schedule 03.07.2015    source источник


Ответы (1)


Думаю, идея достаточно ясная и функции не пересекаются друг с другом. Сначала все очищают:

Очищает набор результатов и освобождает все ресурсы, удерживаемые запросом

После этого вы не сможете получить какую-либо информацию по этому запросу, а второй просто помечает запрос как неактивный (ну, он просто «говорит», что он пуст) и подготавливает запрос, чтобы он был готов к отправке.

  1. повторно казнен
  2. очищен

Связанные значения сохраняют свои значения

Это означает, что по крайней мере некоторые данные все еще доступны после выполнения finish().

Если вы не хотите создавать другой QSqlQuery объект и хотите выполнить совершенно другой запрос, вы можете использовать clear() и не бояться утечек памяти или чего-то еще. Но если вы планируете выполнить тот же запрос позже, например, с другим набором связанных значений, вы можете использовать finish(). Он также освободит некоторые внутренние ресурсы драйвера (как сказано в документации).

person dazewell    schedule 03.07.2015
comment
Спасибо! Это то, что вы знаете, или что-то, что, по вашему мнению, является ответом? Если вы знаете, я отмечу его как правильный :-) - person Lennart Rolland; 15.10.2015
comment
@LennartRolland - источником информации является официальная документация, поэтому я могу сказать, что ЗНАЮ :-) - person dazewell; 21.11.2015