2016-03-25 2 views
1

Я разрабатываю приложение, которое использует базу данных MySQL. Пользователь может оставить приложение работать в течение нескольких дней, но большую часть времени приложение не использует базу данных. В любом случае соединение должно быть активным. И мне интересно, какой подход подходит для проверки того, действительно ли связь на самом деле жива?Обнаружение отключения QSqlDatabase

Должен ли я выполнять простой запрос каждые 5 секунд, чтобы проверить его?

A related question.

+1

Возможно, буквально каждые * 5 * секунд, но звучит как разумный подход. (В сочетании с проверкой фактического статуса открытости). Вы не получите сигналы из QSqlDriver, если соединение с БД будет разорвано (и QSqlDatabase не является QObject). – peppe

+0

Будет интересно узнать, почему такого сигнала нет. – KcFnMi

+1

Ну, а родные (C) API для баз данных уведомляют вас о потерянном соединении? Может быть, только никто не беспокоился ... – peppe

ответ

2

Не очень, вы должны использовать метод bool QSqlDatabase::isOpen, чтобы проверить, если соединение с базой данных открыто. Он возвращает true, если соединение открыто, иначе оно возвращает false.

+0

Как часто? Я ожидал сигнала, чтобы сообщить об этом. – KcFnMi

+1

Когда вы вызываете 'bool QSqlDatabase :: open', соединение устанавливается и будет закрыто при вызове' void QSQlDatabase :: close'. Так что это не обязательно. Но, если хотите, вы должны проанализировать свою систему и решить, как часто это должно быть. Может быть, каждый шаг, каждые 10 минут, 1 час, день. Вы это решаете. – B026

+0

Вы считаете, что 'bool QSqlDatabase :: isOpen()' возвращает значение true после выключения сервера MySQL? – KcFnMi

Смежные вопросы