Lab - dr inż. Zofia Kruczkiewicz

advertisement
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.
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.
2.
3.
4.
Wykonaj kopię programu Baza_2 jako Baza_3 (patrz instrukcja do lab3 - zad.2, pkt. 1)
Zmień nazwę pliku baza_2 na baza_3 (patrz instrukcja do lab3 – zad.2, pkt. 2 )
Dodaj sterownik derbyclient.jar wg pkt3 z zad2.
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.
2.
3.
4.
5.
6.
Wykonaj kopię programu Baza_3 jako Baza_4 (patrz instrukcja do
lab3 - zad.2, pkt. 1)
Zmień nazwę pliku baza_3 na baza_4 (patrz instrukcja do lab3 –
zad.2, pkt. 2 )
Dodaj sterownik derbyclient.jar wg pkt3 z zad2.
Dodaj metodę public void wyszukaj_wg_stanowiska() throws
SQLException, która wykonuje zapytanie wyszukiwania Osob wg
stanowiska w tablicy PERSON
Dodaj metodę, która wstawia nową krotkę do tabeli HOTEL,
FLIGHT, CARRENTAL lub TRIPTYPE.
Wykonaj dowolną operację w bazie danych travel.
Zadanie 5 - dodatkowe
1.
2.
Wykonaj interfejs graficzny użytkownika do wybranych operacji na bazie
danych wykonanych w zadaniach1-4.
Przykłady prostych programów z GUI do wyświetlania zawartości tabeli
PERSON zamieszczono w przykładowych programach Baza_5 i Baza_6
dołączonych do laboratorium.
Download