KL
Konstantin Lazarev9 февраля 2017 г. 16:26

Работа с базами данных

QSqlDataBase

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

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

14
Evgenii Legotckoi
  • 10 февраля 2017 г. 1:30

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

А при завершении программы соединение само должно отключаться корректно.

Дергать подключение к базе данных при каждом запросе тоже не очень хорошо. Лишняя нагрузка будет.

    KL
    • 10 февраля 2017 г. 2:46

    Я перенес свою базу данных на сайт beget.com Там наблюдается та же проблема. Первые 3-5 минут работает хорошо. После чего нужен коннект. Написал им в службу поддержки. Жду ответ.

      Evgenii Legotckoi
      • 10 февраля 2017 г. 3:26

      В любом случае рекомендую предусмотреть механизм по переподключению. Интернет соединение тоже величина не постоянная.

        KL
        • 10 февраля 2017 г. 4:34

        Здравствуйте. В целях безопасности, на MySQL серверах установлено ограничение на время ожидания. При подключении к серверу MySQL можно увеличить время ожидания командой: set session wait_timeout=600; Обратите внимание, что подключение к базе данных не должно быть постоянно открытым, а должно устанавливаться только при обмене данными. Письмо от администрации сервера.

          Evgenii Legotckoi
          • 10 февраля 2017 г. 4:59

          Ну что могу сказать. Так-то логично.

          Обмен данными может быть в течение 10-15 секунд. А потом может быть длительный простой, просто не на каждый же чих открывать и закрывать соединение. Как вариант, можно проверять периодически с помощью запроса SELECT 1 из какой-нибудь таблицы, есть ли подключение. Если выполняется с ошибкой, то переоткрывать соединение.

          Либо просто при неудачном рабочем запросе пытаться переподключить соединение.

            KL
            • 10 февраля 2017 г. 5:02

            set session wait_timeout=600; этот параметр я не могу изменить при помощи программы QT?

              KL
              • 10 февраля 2017 г. 5:12

              Если время коннекта нельзя увеличить, мне нужно делать запросы через открытие закрытие. Наверное так и будет.

                Evgenii Legotckoi
                • 10 февраля 2017 г. 5:49

                Да в общем-то можно. Это же SQL запрос тоже. Попробуйте через QSqlQuery.

                QSqlQuery query;
                query.prepare("SET SESSION wait_timeout = 600;");
                query.exec();
                

                Только всё равно нужно учитывать возможность сброса подключения со стороны сервера.

                  KL
                  • 10 февраля 2017 г. 6:05

                  Я понял. Спасибо Вам, перейду к реализации выше изложенного.

                    KL
                    • 10 февраля 2017 г. 6:12

                    Последний вопрос)

                    QSqlQuery query;
                    query.prepare("SET SESSION wait_timeout = 600;");
                    query.exec();
                    
                    Необходимо отправлять перед каждым обращением или можно время задать (час например) вначале соединения и больше не прописывать его?
                      Evgenii Legotckoi
                      • 10 февраля 2017 г. 6:26

                      В данном случае при каждом подключении придётся выставлять. Чтобы постоянно работало с нужным таймаутом, необходимо прописывать в конфигурационном файле сервера. Тем более, что этот запрос работает только для той сессии, в которой она была вызвана.

                      Так что, если Вы пользуетесь бесплатным виртуальным хостингом, то скорее всего покрутить конфигурационный файл не удастся. Да и судя по ответу, что Вы привели выше - это так и есть.

                        KL
                        • 10 февраля 2017 г. 6:44

                        Проблема решена. Базы данных работают адекватно. Я увеличил время сессии на час. Для меня этого вполне достаточно.

                          KL
                          • 17 февраля 2017 г. 4:09
                          • Ответ был помечен как решение.
                          #include "db.h"
                          #include <QSqlQuery>
                          #include <QDebug>
                          #include <QSqlQuery>
                          void db::Connect()
                          {
                          
                              if(QSqlDatabase::contains(QSqlDatabase::defaultConnection))
                              {
                                DB=QSqlDatabase::database();
                              }
                              else
                              {
                              DB=QSqlDatabase::addDatabase("QMYSQL");
                              DB.setPassword("*********");
                              DB.setHostName("*********.beget.tech");
                              DB.setDatabaseName("*********_comment");
                              DB.setUserName("*********_comment");
                              if (!DB.open())
                              {qDebug() << "Failed to connect to root mysql admin";}
                              else
                              {
                                  qDebug()<<"cool";
                              }
                              QSqlQuery query;
                              query.prepare("SET SESSION wait_timeout = 36000;");
                              query.exec();
                              }
                          }
                          
                          db::db()
                          {
                          
                          }
                          
                          QStringList db::SaytPage()
                          {
                              Connect();
                              QStringList List;
                              QString str;
                              List.clear();
                              QSqlQuery query(DB);
                             query.exec("SELECT namepage FROM page");
                              while(query.next())
                              {
                                 str=query.value(0).toString();
                                 List.push_back(str);
                              }
                              DB.close();
                              DB.removeDatabase("*********_comment");
                              return List;
                          }
                          
                            KL
                            • 17 февраля 2017 г. 4:14

                            Приложение работает без предупреждений. Отредактируйте пожалуйста пароли)

                              Комментарии

                              Только авторизованные пользователи могут публиковать комментарии.
                              Пожалуйста, авторизуйтесь или зарегистрируйтесь
                              AD

                              C++ - Тест 004. Указатели, Массивы и Циклы

                              • Результат:50баллов,
                              • Очки рейтинга-4
                              m
                              • molni99
                              • 26 октября 2024 г. 8:37

                              C++ - Тест 004. Указатели, Массивы и Циклы

                              • Результат:80баллов,
                              • Очки рейтинга4
                              m
                              • molni99
                              • 26 октября 2024 г. 8:29

                              C++ - Тест 004. Указатели, Массивы и Циклы

                              • Результат:20баллов,
                              • Очки рейтинга-10
                              Последние комментарии
                              i
                              innorwall12 ноября 2024 г. 5:12
                              Django - Урок 055. Как написать функционал auto populate field Freckles because of several brand names retin a, atralin buy generic priligy
                              i
                              innorwall12 ноября 2024 г. 1:23
                              QML - Урок 035. Использование перечислений в QML без C++ priligy cvs 24 Together with antibiotics such as amphotericin B 10, griseofulvin 11 and streptomycin 12, chloramphenicol 9 is in the World Health Organisation s List of Essential Medici…
                              i
                              innorwall11 ноября 2024 г. 22:50
                              Qt/C++ - Урок 052. Кастомизация Qt Аудио плеера в стиле AIMP It decreases stress, supports hormone balance, and regulates and increases blood flow to the reproductive organs buy priligy online safe Promising data were reported in a PDX model re…
                              i
                              innorwall11 ноября 2024 г. 21:19
                              Алгоритм сортировки кучей The role of raloxifene in preventing breast cancer priligy precio
                              i
                              innorwall11 ноября 2024 г. 20:55
                              PyQt5 - Урок 006. Работа с QTableWidget buy priligy 60 mg 53 have been reported by Javanovic Santa et al
                              Сейчас обсуждают на форуме
                              i
                              innorwall12 ноября 2024 г. 3:56
                              добавить qlineseries в функции buy priligy senior brother Chu He, whom he had known for many years
                              i
                              innorwall11 ноября 2024 г. 17:55
                              Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
                              9
                              9Anonim25 октября 2024 г. 16:10
                              Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
                              ИМ
                              Игорь Максимов3 октября 2024 г. 11:05
                              Реализация навигации по разделам Спасибо Евгений!

                              Следите за нами в социальных сетях