Zarzadzanie MySQL

0

Witam!
Tworze program wspolpracujacy z baza danych. W zasadzie wszystkie operacje oparte sa na pobieraniu danych badz ich przetwarzaniu. Moje pytanie dotyczy "dobrego stylu" mojego kodu. Mianowicie zaczynam program polaczeniem: Connection conn = DriverManager.getConnection (url, userName, password);Zmienna conn jest udostepniona dla calego programu i co chwila korzystam z niej kiedy w blokach try wykonuje

Statement stat = conn.createStatement();
ResultSet result = stat.executeQuery("...");

Na koncu programu zamykam cale polaczenie.
Chcialbym sie dowiedziec, czy to dobra technika?
Mysle ze laczenie sie za kazdym razem po to tylko, aby pobrac kilka informacji zajmowaloby zbyt duzo czasu. Znow zaladowanie wszystkich informacji i praca na nich bylaby marnotrawstwem pamieci.
Co o tym myslicie?
Moze powinienem utworzyc takze programowa zmienna stat?
Dzieki za wskazowki.

0

Witam
Ja ostatnio pracowałem nad podobną aplikacją, która była moją plikacją dyplomową. Aby zaoszczędzić czasu i estetyki stworzyłem clasę połacz, która łączyła mnie z bazą. W klasie tej miałęm też metodę, która zwracała mi obiekt (połączenia) "con". I dalej w pozostałych classach mojej aplikacji do update-ów insert-ów itp. używałem już tylko tego obiektu con clasy połącz.

0

Aha. Dzieki za odpowiedz.
Czyli metoda nie jest zla, skoro stosowales podobna do pracy dyplomowej, gdzie oceniaja nie tylko efekt, ale takze jakosc kodu. Rozumiem tez, ze do polecen tworzyles kazdorazowo objekt klasy Statement czy tez utworzyles jeden jako zmienna dla programu?
Czy ktos ma jeszcze podobne doswiadczenia?

0

Witam,

rozwiazanie to jest dobre dla twojej aplikacj. Jezeli jednak chcialbys zbudowac wiekszy system enterprise to warto rozwazyc uzycie DataSource i JNDI, co tworzy pule polaczen, z ktorej kozystasz kiedy potrzebujesz i zwalniasz zasob po wykonaniu twojego zapytania do bazy danych. Glowne korzysci to 1) nie tracisz zasobow na tworzenie kolejnych (kosztownych) polaczen, 2) wiele aplikacj moze kozystac z tej same puli polaczen.

0

Po pierwsze - sposób jest poprawny tylko jeśli masz gwarancję, że Twoja aplikacja nie będzie próbowała równolegle wykonać dwóch zapytań za pomocą tego samego obiektu połączenia. W zależności od drivera JDBC, może okazać się, że nie da się wykonać równolegle drugiego zapytania, dopóki gdzieś indziej w kodzie masz otwarty ResultSet. Stąd albo musisz zrobić sobie klasę, która to poprawnie zsynchronizuje, albo po prostu użyć puli połączeń (np. apache commons-dbcp).

@danstefan: Jaki związek z tematem ma JNDI? Żeby korzystać z puli połączeń, nie jest potrzebne.

0

Dzieki za odpowiedzi!
Objekt ResultSet wykorzystuje w zasadzie na bieŻąco i wykluczam mozliwosc blokowania.
Jedyne co pozostaje, to kwestia, czy objekt Statement powinien byc zmienna programowa, poniewaz duzo miejsca w kodzie zajmuje wpisywanie co chwila bloku try catch i tworzenie kolejnych objektow Statement. Czy jest jakas inna zaleta tego rozwiazania, poza tym, ze wiem dokladnie w ktorym miejscu wystapil wyjatek w wykonaniu metod objektu Statement?

0

Hmm z tym Statement to tródno powiedzieć, ja za każdym razem tworzyłem osobny obiekt, ale jeśli chodzi o obsługę wyjątków, to chyba lepiej jest wyłapać ten wyjątek i go wyświetlić np. jako komunikat ostrzegawczy o konkretnym błędzie. Ja w swojej aplikacji za każdym razem gdy kończyłem wykonywanie danego zapytania kończyłem też połączenie. Oczywiście najleprza metoda to wspomniana wyżej pula połączeń, ale w takiej powiedzmy mało zaawansowanej aplikacji ten mój sposób też jest do przełknięcia ;)

0

Dzieki za wskazowki! :-)
Pozdrawiam!

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