Laboratorium 9
Wprowadzenie do korzystania z baz danych - JDBC.
Przed przystąpieniem do realizacji ćwiczenia warto odświeżyć sobie wiedzę z wykładu dotyczącego JDBC a następnie zaimportować projekt Eclipse zawierający trzy klasy oraz plik JAR ze sterownikiem bazy H2 (plik JAR ze sterownikiem bazy H2 jest typu "runnable JAR" a po jego uruchomieniu można zapoznać się z alternatywnym mechanizmem zarządzania bazami danych H2). W zaimportowanym projekcie dwie klasy pozwalają na tworzenie nowej bazy (jeden tworzy pustą bazę, drugi tworzy bazę oraz wypełnia ją danymi zawierającymi kursy walut z kilku lat). Trzeci z plików pozwala na wyświetlenie zawartości utworzonej bazy z kursami walut. Warto sprawdzić jaki efekt da próba uruchomienia tego przykładu przed utworzeniem bazy danych...
Zadanie wstępne (0,5 pkt)
Zmodyfikować przykładową klasę wypisującą kursy walut, tak, aby w konsoli wyświetlane były daty dni, w których kurs dolara był większy od kursu euro.
Zadanie 1 (2 pkt) - korzystanie z bazy H2 (lokalnej)
Stworzyć okienko Swing zawierające trzy komponenty: JTextField, JButton oraz JTextArea. Wciśnięcie przycisku powinno powodować nawiązanie połączenia z bazą danych oraz wykonanie kwerendy (zapytania) wpisanego przez użytkownika do pola tekstowego JTextField (powinno być możliwe wykonanie dowolnej kwerendy - nie jest wymagane stosowanie zabezpieczeń przez "działaniami złośliwymi"). Efekt zapytania powinien być wyświetlany w komponencie JTextArea.
Punktacja:
- Stworzenie okienka zawierającego wszystkie wymagane komponenty oraz obsługę zdarzeń – 0,5 pkt
- Łączenie się z bazą danych oraz wykonywanie kwerendy/zapytana - 1 pkt.
- Wyświetlanie efektu zapytania w JTextArea - 0,5 pkt
Zadanie 2 (2,5 pkt) - korzystanie z bazy MySQL (na zewnętrznym serwerze)
Realizację drugiego zadania należy rozpocząć od utworzenie konta w serwisie db4free.net, który pozwala na tworzenie darmowych baz danych MySQL z dostępem zewnętrznym. (Uwaga: można wykorzystać inny portal świadczący podobne usługi, ewentualnie własny serwer lub utworzyć testowe konto w jednej z firm świadczących usługi hostingowe - należy się jednak upewnić, że konto darmowe/testowe pozwala na zewnętrzny dostęp do bazy danych).
Utworzenie bazy danych w serwize db4free jest dość proste - należy podać nazwę bazy, użytkownika i hasło oraz adres email, na który przesłany zostanie link aktywujący konto oraz zawierający podstawowe informacje na temat usługi.
Z poziomu JAVY można się podłączyć do nowo utworzonej bazy poprzez odpowiednie zdefiniowanie połączenia, np:
conn = DriverManager.getConnection("jdbc:mysql://db4free.net/nazwabazy", "nazwauzytkownika", "haslo");
Oprócz podania odpowiedniej nazwy bazy oraz danych dostępowych należy zwrócić uwagę, że konieczna jest zmiana sterownika bazy na MySQL. Należy odszukać w internecie sterownik JDBC dla bazy MySQL a następnie dodać go do projektu (najlepiej poprzez skopiowanie odpowiedniego pliku JAR do katalogu LIB w projekcie a następnie dodanie go do "build path").
W utworzonej bazie MySQL należy następnie utworzyć tabelę waluty, zawierającą takie same dane jak tabela waluty w poprzednim zadaniu. Można odpowiednio zmodyfikować klasę tworzącą tabelę w bazie H2, lub skorzystać z innych narzędzi zarządzania utworzoną bazą danych (np. phpMyAdmin lub MySQL Workbench i wykorzystać plik ze skryptem SQL).
Następnie należy stworzyć aplikację zawierającą przycisk, pole tekstowe i JTextArea, jednak w tym wypadku wciśniecie przycisku powinno spowodować pobranie z bazy danych wszystkich rekordów, dla których cena dolara jest niższa niż wartość podana w polu tekstowym. Aplikacja powinna być odporna na "złośliwe zachowanie" (np. na wpisanie w polu tekstowym: " 3; drop table waluty; " ) - należy wykorzystać klasę PreparedStatement. Ponadto pobieranie danych z bazy nie powinno blokować interfejsu użytkownika (zwłaszcza, że bazy z darmowego serwisu db4free są dość wolne) - połączenie z bazą danych oraz wykonywanie zapytań powinno być realizowane w oddzielnym wątku, dzięki czemu wątek EDT nie zostanie zablokowany i okienko będzie przez cały czas reaktywne. (Uwaga: w praktyce wskazane byłoby również zabezpieczenie programu przed "niekontrolowanym" zakończeniem, które mogłoby nastąpić np. poprzez zamknięcie okienka w trakcie gdy trwałoby pobieranie danych z bazy; ze względu na ograniczenie czasowe nie jest to wymagane w tym zadaniu).
Punktacja:- Stworzenie bazy danych MySQL i dodanie do niej danych z tabeli waluty – 1 pkt
- Stworzenie aplikacji łączącej się z bazą i bezpiecznie pobierającą rekordy, dla których cena dolara jest niższa od wartości podanej w polu tekstowym – 1 pkt
- Stworzenie oddzielnego wątku do komunikacji z bazą danych - 0,5 pkt
Zadanie dodatkowe (1 pkt)
Stworzenie aplikacji umożliwiającej pobranie z tabeli waluty danych z czasu określanego przez użytkownika oraz wyświetlenie na wykresie w funkcji czasu (TimeSeries z JFreeChart).