Protokół JDBC współpraca z relacyjnymi bazami danych lab4 Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych
Zadanie1 Połączenie z bazą danych travel systemu bazodanowego Derby (metoda void polaczenie_z_baza()), wyświetlanie zawartości tabeli Person (metoda void wyswietl_osoby() ) 1. Uruchom program Baza_1 w środowisku NetBeans 6.7.1 załącznik do laboratorium. Należy uruchomić serwer bazy danych.w tym celu należy wykonać czynności wg pkt2 lub wykonując czynności pokazane poniżej w okienku Services.
2. W okienku Services należy otworzyć pozycję Databases. Następnie należy kliknąć prawym klawiszem myszy na rozerwany prostokąt bazy danych jdbc:derby://localhost:1527/travel. W menu podręcznym należy kliknąć na pozycję Connect. Po chwili prostokąt zostanie scalony, co symbolizuje połączenie z bazą danych.
Widok bazy danych travel
Schemat bazy danych travel Klucze główne Klucze obce
Klucze obce Klucze główne
Klucze obce Klucze główne
Wyświetlenie danych z tabeli PERSON
Zawartość tabeli PERSON
Wykonanie zapytania na tabeli PERSON wykonanie działań pomocniczych
Wynik działania programu
Zadanie 2 cd zadania 1- należy dodać: wyświetlanie zawartość tabeli TRIP (metoda void wyswietl_wycieczki()), wyświetlanie wycieczek każdej osoby (metoda void wyswietl_wycieczki_osob()) 1. Wykonaj kopię programu Baza_1 jako Baza_2 (patrz instrukcja do lab3 - zad.2, pkt. 1) 2. Zmień nazwę pliku baza_1 na baza_2 (patrz instrukcja do lab3 zad.2, pkt. 2 ) 3. Dodaj bibliotekę sterownika derbyclient.jar jak poniżej. (źródłowe położenie to np.. C:\Sun\AppServer\javadb\lib)
4. Zmodyfikuj zawartość metody void wyswietl_osoby() wg slajdu poniżej.
5. Dodaj metodę void wyswietl_wycieczki() - wyświetlanie zawartość tabeli TRIP
6. Dodaj metodę void wyswietl_wycieczki_osob() -- wyświetlanie wycieczek każdej osoby
7. Uruchom program
Wynik działania programu (z lewej strony: zawartość tabeli TRIP, z prawej strony zawartość złączonych tabel PERSON i TRIP)
Zadanie 3 cd zadania 2 dodawanie nowych osób do tabeli PERSON oraz dodawanie nowych wycieczek wybranej osoby do tabeli TRIP 1. Wykonaj kopię programu Baza_2 jako Baza_3 (patrz instrukcja do lab3 - zad.2, pkt. 1) 2. Zmień nazwę pliku baza_2 na baza_3 (patrz instrukcja do lab3 zad.2, pkt. 2 ) 3. Dodaj sterownik derbyclient.jar wg pkt3 z zad2. 4. Dodaj metodę void wstaw_osobe() 4.1. dodaj pomocniczą klasę WeWy do wprowadzania danych z klawiatury. Podczas edycji kodu zaimportuj brakująced biblioteki za pomocą Fix Imports (kliknij prawym klawiszem w oknie Edytora Javy i wybór opcji Fix Imports) class WeWy { static String westring(string menu) { InputStreamReader wejscie = new InputStreamReader(System.in); BufferedReader bufor = new BufferedReader(wejscie); try { System.out.print(menu); return bufor.readline(); catch (IOException e) { System.err.println("Blad IO String"); return "";
4.2. Dodaj klasę Person do wprowadzania danych do tabeli Person class Person { public String name, jobtitle; public void wstaw_tytul() { name = WeWy.weString("Podaj nazwisko: "); jobtitle = WeWy.weString("Podaj stanowisko pracy: ");
4.3. Dodaj metodę public String klucz_glowny(string sql1, String sql2) do klasy baza_3 w celu wyznaczenia wartości kolejnego klucza głównego. Metoda jest uniwersalna, ponieważ łańcuch sql2 + "."+sql1 tworzy nazwę pola klucza głównego w dowolnej tabeli (sql1 jest nazwą klucza głównego, a sql2 jest nazwą tabeli). Metoda zwraca wartość kolejnego klucza głównego, jakim można nadać nowej krotce lub null. public String klucz_glowny(string sql1, String sql2) { try { sql = " SELECT MAX(" + sql2 + "."+sql1 + ")+1 AS MAXID FROM " + sql2; krotki = polecenie.executequery(sql); krotki.next(); String pom = krotki.getstring("maxid"); return pom; catch (Exception e) { return null;
4.4. Dodaj metodę void wstaw_osobe() do klasy baza_3 w celu dodania nowej krotki do tabeli PERSON public void wstaw_osobe() throws SQLException { String id_osoby; Person t = new Person(); t.wstaw_tytul(); polaczenie.setautocommit(false); try { polecenie = polaczenie.createstatement(); if((id_osoby = klucz_glowny("personid", "TRAVEL.PERSON"))==null) return; sql = "INSERT INTO TRAVEL.PERSON (PERSONID,NAME,JOBTITLE,FREQUENTFLYER)" + " VALUES (" + id_osoby + ",'" + t.name + "','" + t.jobtitle + "'," + 0 + ")"; polecenie.addbatch(sql); polecenie.executebatch(); polaczenie.commit(); catch (BatchUpdateException e) { System.out.println("Wycofanie transakcji"); polaczenie.rollback();
4.5. Wynik działania nowej metody
5. Dodawanie nowej krotki do tablicy TRIP 5.1. Dodaj klasę Trip do wprowadzania danych do tabeli TRIP. Metoda void wstaw_date() otrzymuje liczbę dni metodą westring() i dodaje je do daty bieżącej metodą settime. Następnie wykorzystuje metodą SimpleDateFormat do nadania dacie formatu wymaganego w tabeli TRIP w bazie danych class Trip { public String depcity, destcity; String depdate; void wstaw_depcity() { depcity = WeWy.weString("Podaj miasto poczatkowe: "); void wstaw_destcity() { destcity = WeWy.weString("Podaj miasto koncowe: "); void wstaw_date() { Date pom1 = new Date(); String pom2 = WeWy.weString("Podaj date: "); // liczbe dni od dnia bieżącego pom1.settime(pom1.gettime() + Long.parseLong(pom2) * 24 * 60 * 60 * 1000); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); depdate = format.format(pom1.gettime()); public void wstaw_wycieczke() { wstaw_depcity(); wstaw_destcity(); wstaw_date();
5.2. Należy dodać metodę public String wyszukaj_typ_wycieczki() do klasy baza_3 w celu wyszukania klucza głównego typu wycieczki, którą należy dodać. public String wyszukaj_typ_wycieczki() { try { String typ = WeWy.weString("Podaj typ wycieczki: "); sql = "SELECT * FROM TRAVEL.TRIPTYPE WHERE TRAVEL.TRIPTYPE.NAME = '" + typ + "'"; krotki = polecenie.executequery(sql); if (krotki.next()) { return krotki.getstring("triptypeid"); catch (Exception e) { return null; 5.3. Należy dodać metodę public String wyszukaj_osobe() do klasy baza_3 w celu wyszukania klucza głównego osoby, której należy dodać nowa wycieczkę public String wyszukaj_osobe() { try { String name = WeWy.weString("Podaj nazwisko osoby: "); sql = "SELECT * FROM TRAVEL.PERSON WHERE TRAVEL.PERSON.NAME = '" + name + "'"; krotki = polecenie.executequery(sql); if (krotki.next()) { return krotki.getstring("personid"); catch (Exception e) { return null;
5.4. Należy dodać metodę public void wstaw_wycieczke() do klasy baza_3 w celu wstawienia nowej krotki do tabeli TRIP public void wstaw_wycieczke() throws SQLException { Trip k = new Trip(); k.wstaw_wycieczke(); String id_osoby, id_typ, id_trip; polaczenie.setautocommit(false); try { polecenie = polaczenie.createstatement(); if ((id_osoby = wyszukaj_osobe()) == null) { return; if ((id_typ = wyszukaj_typ_wycieczki()) == null) { return; if ((id_trip = klucz_glowny("tripid", "TRAVEL.TRIP")) == null) { return; sql = "INSERT INTO TRAVEL.TRIP (DEPDATE,DEPCITY,DESTCITY,TRIPTYPEID,PERSONID,TRIPID)" + " VALUES ('" + k.depdate + "','" + k.depcity + "','" + k.destcity + "'," + id_typ + "," + id_osoby + "," + id_trip + ")"; polecenie.executeupdate(sql); polecenie.executebatch(); polaczenie.commit(); catch (BatchUpdateException e) { System.out.println("Wycofanie transakcji"); polaczenie.rollback();
5.5. Metoda main
5.6. Wynik działania nowej metody
Zadanie 4 cd zadania 3 dodawanie przeszukiwania tabel PERSON dodawanie nowych krotek do wybranej tabeli z: HOTEL, FLIGHT, CARRENTAL lub TRIPTYPE dodanie dowolnej operacji na tabelach bazy danych travel 1. Wykonaj kopię programu Baza_3 jako Baza_4 (patrz instrukcja do lab3 - zad.2, pkt. 1) 2. Zmień nazwę pliku baza_3 na baza_4 (patrz instrukcja do lab3 zad.2, pkt. 2 ) 3. Dodaj sterownik derbyclient.jar wg pkt3 z zad2. 4. Dodaj metodę public void wyszukaj_wg_stanowiska() throws SQLException, która wykonuje zapytanie wyszukiwania Osob wg stanowiska w tablicy PERSON 5. Dodaj metodę, która wstawia nową krotkę do tabeli HOTEL, FLIGHT, CARRENTAL lub TRIPTYPE. 6. Wykonaj dowolną operację w bazie danych travel.
Zadanie 5 - dodatkowe 1. Wykonaj interfejs graficzny użytkownika do wybranych operacji na bazie danych wykonanych w zadaniach1-4. 2. Przykłady prostych programów z GUI do wyświetlania zawartości tabeli PERSON zamieszczono w projektach Baza_5 i Baza_6, dołączonych do laboratorium. Baza_5 Baza_6