Kiedy zamykać połączenie z bazą danych?

0

Witam piszę aplikację w Qt która będzie się łączyła z bazą danych MySQL i tu mam pytanie kiedy rozpoczynać i kończyć połączenie z bazą danych. Czy przy starcie głównego programu łączyć się z bazą i rozłączać przy zamykaniu programu czy może w momencie gdy mam wykonać zapytanie łączyć i zaraz po wykonaniu rozłączać. Które podejście może być lepsze, która metoda jest stosowana w profesjonalnych programach.

3

Czy przy starcie głównego programu łączyć się z bazą i rozłączać przy zamykaniu programu?

Absolutnie nie.

Czy może w momencie gdy mam wykonać zapytanie łączyć i zaraz po wykonaniu rozłączać?

Zdecydowanie tak przy czym nadmienić należy, że chodzi zarówno o jedno zapytanie jak i serię zapytań w ramach wykonywanego jakiegoś zadania.

0

zgadzam się z grzesiek51114

0

Dziękuję za pomoc.
Podsumowując to co napisano prawidłowe rozwiązanie to:

db.open();
sqlQuery.exec("SELECT * FROM Users")
db.close();

/*
Jakiś tam kod.
*/

db.open();
sqlQuery.exec("SELECT * FROM Passwords")
db.close();
0

Ja napisałbym i tak i nie. Nie otwierać połączenia przed każdym zapytaniem i nie zamykać go po każdym zapytaniu. Należy jednak rozsądnie tym operować. Tam gdzie masz powiązane ze sobą zapytania to na jednym połączeniu, natomiast tam, gdzie zapytanie mogłoby być wykonywane niezależnie - robimy na osobnym połączeniu, dzięki temu takiej funkcji będzie można użyć w innym wątku. Po prostu dbaj o funkcjonalność. Ciężko powiedzieć nie znając projektu czy osobne połączenie w każdej metodzie, czy połączenie per obiekt, bo to zależy od konkretnego przypadku.

0

Zgadzam się z @kaczus Napisałem sporo programów bazodanowych i ZAZWYCZAJ trzymałem ciągle otwarte połączenie. Poza sytuacjami, gdzie pracowałem z MySQL. Być może specyfika tamtych projektów była taka, że gdy ciągle zamykałem i otwierałem połączenia, to w pewnych momentach miałem problemy, żeby dostać się do bazy.

0

@Juhas: no, bo przecież wszystko zależy od tego co chcesz zrobić. Nawet jeżeli korzysta się z ORM to połączenie otwiera się jedynie na czas wykonywania określonych kwerend. Zwykle otwiera się sesję używając using, robi się swoje i połączenie się zamyka. Absolutnie nie miałem na myśli sytuacji: jedno zapytanie == jedno połączenie, jednakże uważam, że trzymanie podniesionego połączenia przez cały czas działania programu jest podejściem nieprawidłowym. Ot chociażby dlatego, że działa kompletnie nieużywany zasób. To nie gra sieciowa czy komunikator, że musi być ciągle podniesione połączenie TCP :) (chociaż w grach multi to pewnie wszystko łazi przez UDP)

Z MySQL'em nie miałem żadnych problemów, czy to korzystając z ORM, a czy za pomocą zwykłych zapytań, mimo całej jego specyfiki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1