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 główne
Klucze obce
Klucze główne Klucze
obce
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