Название: Как грамотно закрыть подключение к БД? Отправлено: Павелъ от Декабрь 07, 2017, 13:23 Доброго времени суток.
Понадобилось написать функцию, которая проверяет доступность БД. Есть три СУБД: на Оракле, на ПосгреСКЛ и на МССКЛ. Функция, возвращающая конечный результат: Код: bool CommonFunctions::isConnectedToDataBase(DataBaseInfo dbInfo) Для Оракле: Код: bool CommonFunctions::isConnectToOracleDataBase(DataBaseInfo dbInfo) Для МССКЛ: Код: bool CommonFunctions::isConnectedToMS_SQL_dataBase(DataBaseInfo dbInfo) Для Посгре: Код: bool CommonFunctions::isConnectedToPosgreSQL_dataBase(DataBaseInfo dbInfo) Ну, и вспомогательная функция для соединения с QODBC: Код: QString CommonFunctions::getODBCconnectionSettings(DataBaseInfo dbInfo) Сначала я создавал подключение к БД таким образом: Код: QSqlDatabase db = QSqlDatabase::addDatabase("QOCI"); Но после вызова следующей функции появлялись варнинги о том, что старое соединение удалено, хотя перед возвращением результата я делаю db.close(). Тогда я прочитал, что надо в таком случае указать имя соединения, и я сделал подключение следующим образом: Код: QSqlDatabase db = QSqlDatabase::addDatabase("QOCI","Oracle_connection"); добавив имя соединения. С тремя разными соединениями это прокатывает, но как только я вызываю ещё раз проверку соединения, например для Оракла, то опять появляется сообщение, что старое соединение удалено. Тогда я решил, что после db.close() сделаю следующее: Код: db.removeDatabase("Oracle_connection"); И тут начались варнинги с вылетами приложения: Код: QSqlDatabasePrivate::removeDatabase: connection 'MS_SQL_connection' is still in use, all queries will cease to work. Вопрос в следующем. Есть данные для подключения к БД. Мне нужно получить ТОЛЬКО информацию о том, есть ли подключение и посылается ли тестовый sql-запрос. То есть, в функции создаётся соединение, а перед тем, как возвратить результат оно должно полностью закрыться и удалиться из программы. То есть: есть данные для БД, нужно возвратить её работоспособность и не хранить никаких соединений. Что я делаю не так, и как это грамотно сделать? Спасибо. Название: Re: Как грамотно закрыть подключение к БД? Отправлено: Павелъ от Декабрь 07, 2017, 14:23 Пришла идея проверять наличие соединения с помощью contains а qsqldatabase. При наличии делать соединение к существующей, иначе - создавать.
Название: Re: Как грамотно закрыть подключение к БД? Отправлено: Павелъ от Декабрь 07, 2017, 17:50 Да, так работает.
|