79
Programowanie Obiektowe Java Małgorzata Janik Zakład Fizyki Jądrowej [email protected] http://java.fizyka.pw.edu.pl/

Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2018/Java7... · Podstawowe właściwości: - wielkość liter nie ma znaczenia - polecenia w językach

Embed Size (px)

Citation preview

Programowanie Obiektowe

JavaMałgorzata Janik

Zakład Fizyki Ją[email protected]

http://java.fizyka.pw.edu.pl/

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Bazy danychDBMS

H2SQL

JDBC

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Bazy Danych

● Baza danych = zbiór danych zapisanych zgodnie z określonymi regułami. – W szerszym znaczeniu będzie obejmować np. księżkę

telefoniczną.– W węższym (dla nas interesującym) znaczeniu obejmuje

dane cyfrowe gromadzone zgodnie z zasadami przyjętymi dla danego programu komputerowego specjalizowanego do gromadzenia i przetwarzania tych danych.

– Program taki nazywany jest „systemem zarządzania bazą danych” (ang. database management system, DBMS).

za: Wikipedia

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Bazy danych

● Rodzaje baz danych (wg. struktur organizacji danych)

– Bazy proste:● kartotekowe● hierarchiczne

– Bazy złożone:● relacyjne● obiektowe● relacyjno-obiektowe● strumieniowe● temporalne● nierelacyjne (NoSQL)

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Bazy danych

● Rodzaje baz danych (wg. struktur organizacji danych)

– Bazy proste:● kartotekowe● hierarchiczne

– Bazy złożone:● relacyjne● obiektowe● relacyjno-obiektowe● strumieniowe● temporalne● nierelacyjne (NoSQL)

Najczęściej używane bazy danych:RELACYJNE

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Bazy danych

● Relacyjne bazy danych– w modelu relacyjnym dane grupowane są w

relacje, które reprezentowane są przez tablice

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Bazy danych

● Relacyjne bazy danych

https://pl.wikipedia.org/wiki/Model_relacyjny#/ media/File:Relational_model_concepts_PL.png

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Bazy danych

● Relacyjne bazy danych– w modelu relacyjnym dane grupowane są w relacje, które

reprezentowane są przez tablice – relacje są pewnym zbiorem rekordów o identycznej strukturze

wewnętrznie powiązanych za pomocą związków zachodzących pomiędzy danymi

– związki pomiędzy relacjami zapewniają integralność referencyjną danych i pozwalają modelować odpowiednią logikę naszej struktury

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Bazy danych

● Relacyjne bazy danych

Więcej informacji:http://www.sqlpedia.pl/relacyjne-bazy-danych-pojecia-podstawowe/

– związki pomiędzy relacjami zapewniają integralność referencyjną danych i pozwalają modelować odpowiednią logikę naszej struktury

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Relacyjne bazy danych

● Najważniejsze– w modelu relacyjnym dane grupowane są w

relacje, które reprezentowane są przez tablice

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Bazy danych

● System zarządzania bazą danych, (ang. Database Management System, DBMS) – oprogramowanie bądź system

informatyczny służący do zarządzania bazą danych (czyli zbiorem danych z określonymi regułami).

– System zarządzania bazą danych● może być również serwerem bazy danych

lub● może udostępniać bazę danych lokalnie – na

określonym komputerze.

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Bazy danych

● Mamy np. wspomnianą książkę telefoniczną

● Chcemy ją zapisać w postaci cyfrowej

● Co robimy?

Photo by: Selmer van Alten

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Bazy danych

● Co robimy?– Ustalamy rodzaj bazy danych, w jakiej

chcemy ją zapisać.

Photo by: Selmer van Alten

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Bazy danych

● Co robimy?– Ustalamy rodzaj bazy danych, w jakiej

chcemy ją zapisać. Łatwe, → relacyjna.

Photo by: Selmer van Alten

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Bazy danych

● Co robimy?– Ustalamy rodzaj bazy danych, w jakiej

chcemy ją zapisać. Łatwe, → relacyjna.– Ustalamy jakiego DBMS będziemy używać.

Photo by: Selmer van Alten

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Bazy danych

● Co robimy?– Ustalamy rodzaj bazy danych, w jakiej

chcemy ją zapisać. Łatwe, → relacyjna.– Ustalamy jakiego DBMS będziemy używać.

Popularne możliwości:→

Photo by: Selmer van Alten

https://db-engines.com/en/ranking

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Bazy danych

● Co robimy?– Ustalamy rodzaj bazy danych, w jakiej

chcemy ją zapisać. Łatwe, → relacyjna.– Ustalamy jakiego DBMS będziemy używać.

Popularne możliwości:→

→ Bądź inne, dopasowane do naszych potrzeb :

Photo by: Selmer van Alten

https://db-engines.com/en/ranking

na 342 możliwych

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Baza danych H2 http://www.h2database.com

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Baza danych H2

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Baza danych H2

● Zalety:– Mieści się w jednym pliku jar (w tym

pliku mieści się serwer, a nie tylko klient).– Dobry wybór do małych aplikacji (np. w

Swingu) które chcą korzystać z funkcjonalności dostępu do bazy danych, a nie chcą zmuszać użytkownika do instalacji serwera.

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Bazy danych

● Co robimy?– Ustalamy rodzaj bazy danych, w jakiej

chcemy ją zapisać. Łatwe, → relacyjna.– Ustalamy jakiego DBMS będziemy używać.

Np. → H2.– Tworzymy w BDMS wszystkie potrzebne

tabele i wypełniamy je. Jak? Musimy się →jakoś skomunikować z naszą bazą danych.

● Najbardziej popularnym językiem do komunikacji jest SQL.

Photo by: Selmer van Alten

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Język SQL

● SQL, ang. Structured Query Language, jest językiem pozwalającym na modyfikację relacyjnych baz danych i umożliwia dostęp do nich.– SQL został standardem American National Standards

Institute (ANSI) w 1986, oraz International Organization for Standardization (ISO) w 1987.

– Mimo standardów, pomiędzy różnymi DBMS występują pewne różnice w użyciu SQL.

● Wszystkie bazy danych mają własne dialekty SQL, więc tekst zapytań będzie różnić się dla różnych baz danych.

● To powoduje, że bazy danych są bardzo słabo przenośne. Zawsze musimy pisać kod pod konkretny typ bazy danych.

– Podstawy SQL właściwie wszędzie są takie same.

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Język SQL

Język SQL pozwala na zarządzanie bazą danych, między innymi poprzez: - tworzenie nowych tabel - dodawanie danych do tabel - modyfikację danych zawartych w tabelach - modyfikację struktury tabel - usuwanie danych z tabel

- oraz usuwanie całych tabel - pobieranie danych z tabel

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Język SQL

Podstawowe właściwości: - wielkość liter nie ma znaczenia - polecenia w językach baz danych nazywamy

zapytaniami lub kwerendami (ang. query).● dlatego SQL nazywany jest też językiem

zapytań (ang. query language) - każde zapytanie kończy się średnikiem ( ; )

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Usuń tabelę (jeśli istnieje) DROP TABLE IF EXISTS TEST;

Stwórz nową tabelę z kolumnami ID i NAME

CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR(255));

Dodaj nowy wiersz INSERT INTO TEST VALUES(1, 'Hello');

Dodaj kolejny wiersz INSERT INTO TEST VALUES(2, 'World');

Wypisz tabelę SELECT * FROM TEST ORDER BY ID;

Zmień zawartość wiersza UPDATE TEST SET NAME='Hi' WHERE ID=1;

Usuń wiersz DELETE FROM TEST WHERE ID=2;

Język SQL

Przykładowy skrypt (przykłady zapytań)

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

CREATE TABLE table_name ( column1 datatype, column2 datatype, column3 datatype, ....);

Język SQL – tworzenie przykładowej tabeli

Tworzenie tabeli: CREATE TABLE● Składnia:

Typ kolumny (przykłady):int

date / datetimefloat

varchar(255)

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

CREATE TABLE pracownik ( int id, varchar(100) imie, varchar(100) nazwisko);

Język SQL – tworzenie przykładowej tabeli

Tworzenie tabeli: CREATE TABLE● Przyklad:

id imie nazwisko

1 Jan Kowalski

2 Zofia Kwiatkowska

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

CREATE TABLE table_name ( column1 datatype not null, column2 datatype, column3 datatype, .…PRIMARY KEY (column1));

Język SQL – tworzenie przykładowej tabeli

Tworzenie tabeli: CREATE TABLE● Składnia:

Klucz podstawowy (PRIMARY KEY):Tabele należy tworzyć w ten sposób, by zawsze mócjednoznacznie odwołać się do każdego z rekordów.

Klucz podstawowy określa taką jednoznaczną wartość (zestaw wartości) po którym możemy każdy wiersz rozróżnić.Każda tabela ma tylko jeden klucz, który nie może być NULL.

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

CREATE TABLE table_name ( column1 datatype PRIMARY KEY, column2 datatype, column3 datatype, .…

);

Język SQL – tworzenie przykładowej tabeli

Tworzenie tabeli: CREATE TABLE● Składnia:

Klucz podstawowy (PRIMARY KEY):Tabele należy tworzyć w ten sposób, by zawsze mócjednoznacznie odwołać się do każdego z rekordów.

Klucz podstawowy określa taką jednoznaczną wartość (zestaw wartości) po którym możemy każdy wiersz rozróżnić.Każda tabela ma tylko jeden klucz, który nie może być NULL.

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

CREATE TABLE table_name ( int id not null auto_increment, column2 datatype, column3 datatype, .…PRIMARY KEY (column1));

Język SQL – tworzenie przykładowej tabeli

Tworzenie tabeli: CREATE TABLE● Składnia:

Automatyczne przypisywanie:auto_increment pozwala na automatyczne wpisywanie

pól typu “id” :

pierwszą wartością będzie 1, każda następna będzie poprzednia+1

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

CREATE TABLE table_name ( int id not null auto_increment, column2 datatype default wartość, column3 datatype, .…PRIMARY KEY (column1));

Język SQL – tworzenie przykładowej tabeli

Tworzenie tabeli: CREATE TABLE● Składnia:

defaultPozwala na ustawienie domyślnej wartości

dla danej kolumny.

Jeśli dodając nowy rekord nie ustalimy innej wartości, zostanie przypisana ta, którą określa default.

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Język SQL – tworzenie przykładowej tabeli

DROP TABLE IF EXISTS `waluty`;

CREATE TABLE `waluty` ( `Id` int unsigned NOT NULL auto_increment, `data` date default GETDATE(), `USD` float default NULL, `EUR` float default NULL, `GBP` float default 0, PRIMARY KEY (`Id`)) ;

Tworzenie tabeli: CREATE TABLE

Jeśli już istnieje tabela o nazwie “waluty” to ją usuń.

Stwórz tabelę “waluty” z następującymji kolumnami:Id, data, USD EUR, GBP

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Język SQL – tworzenie przykładowej tabeli

DROP TABLE IF EXISTS `waluty`;

CREATE TABLE `waluty` ( `Id` int unsigned NOT NULL auto_increment, `data` date default GETDATE(), `USD` float default NULL, `EUR` float default NULL, `GBP` float default 0, PRIMARY KEY (`Id`)) ;

Tworzenie tabeli: CREATE TABLETyp kolumny:

intdatefloat

getdate() - funkcja zwracająca

obecną datę

Kluczem podstawowym jestautomatycznie inkrementowane

Id.

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Id data USD EUR GPB

1 2018-04-02 4.1267 4.2232 6.7571

2 2018-04-03 4.1299 4.2797 6.776

waluty

Język SQL – tworzenie przykładowej tabeli

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Id imie nazwisko data_urodzenia

1 Małgorzata Janik 1887

2 Helena Nowak 1984

osoby

Język SQL – tworzenie przykładowej tabeli

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Id imie nazwisko data_urodzenia

1 Małgorzata Janik 1887

2 Helena Nowak 1984

osoby

Język SQL – tworzenie przykładowej tabeli

create table osoby + drop if exists

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Id imie nazwisko data_urodzenia

1 Małgorzata Janik 1887

2 Helena Nowak 1984

osoby

Język SQL – tworzenie przykładowej tabeli

create table osoby

Primary keyNOT NULL

auto_increment

+ drop if exists

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Id imie nazwisko data_urodzenia

1 Małgorzata Janik 13-11-1887

2 Helena Nowak 10-12-1984

osoby

Język SQL – tworzenie przykładowej tabeli

create table osoby

Primary keyNOT NULL

auto_increment

Id – int unsignedImie - varchar(20)Nazwisko - varchar(40)data_urodzenia - date

+ drop if exists

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

DROP TABLE IF EXISTS `Osoby`;

CREATE TABLE `Osoby` ( `Id` int(6) unsigned NOT NULL auto_increment, `imie` varchar(20) NOT NULL, `nazwisko` varchar(40)NOT NULL, `data_urodzenia` date default NULL, PRIMARY KEY (`Id`)) ;

Język SQL – tworzenie przykładowej tabeli

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

INSERT INTO table_name (column1, column2, column3, ...)VALUES (value1, value2, value3, ...);

INSERT INTO table_nameVALUES (value1, value2, value3, ...);

Jeśli pilnujemy kolejności kolumn:

Niezależnie od kolejności:

Język SQL – dodawanie danych

Tworzenie tabeli: INSERT INTO● Składnia:

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Język SQL – dodawanie danych

INSERT INTO `waluty` VALUES (1,’2000-01-03’ ,4.1171,4.165,6.6576);

INSERT INTO `waluty` (`Id`,`data`,`USD`,`EUR`,`GBP`) VALUES (2,'2000-01-04',4.1267,4.2232,6.7571);

INSERT INTO `waluty` (`data`,`USD`,`EUR`,`GBP`) VALUES ('2000-01-05',4.1299,4.2797,6.776);

INSERT INTO waluty (data,USD) VALUES ('2000-01-06’ ,4.1129);

Pozostałe pola zostaną wypełnione automatycznie (auto_increment)bądź będą miały wartość NULL.

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Język SQL – komenda SELECT

SELECT column1, column2, ... FROM table_name [WHERE condition] [ORDER BY o_column]

gdzie:● column1, column2,... to nazwy kolumn, których

zawartość ma być wyświetlona jako wynik zapytania. ● table_name to nazwa tabeli, z której pobierane są

dane ● condition to warunek jaki muszą spełniać wiersze

tabeli, aby zostać wyświetlone ● o_column to kolumna, wg. której mają być

posortowane wyniki zapytania

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Język SQL – komenda SELECT

Chcąc pobrać wszystkie kolumny z tabeli zamiast wypisywać ich nazwy można użyć * (gwiazdka), np.. komenda:

SELECT * FROM osoby;

zwróci wszystkie kolumny z tabeli osoby.

Parametry [WHERE condition] oraz [ORDER BY o_column] są opcjonalne.

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Język SQL – komenda SELECTZałóżmy, że tabela osoby zawiera trzy kolumny: imie, nazwisko oraz wiek. W takim przypadku komenda:

SELECT imie FROM osoby WHERE wiek = 18zwróci imiona osób, które mają 18 lat.

SELECT nazwisko, imie FROM osoby ORDER BY wiekzwróci nazwiska i imiona wszystkich osób z tabeli, posortowane według wieku.

SELECT nazwisko, imie FROM osoby ORDER BY nazwisko DESCzwróci nazwiska i imiona wszystkich osób z tabeli, posortowane alfabetycznie według nazwisk, w odwróconej kolejności od Z do A (modyfikator DESC sprawia, że kolejność sortowania jest odwócona)

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Język SQL – komenda SELECTW warunkach występujących po WHERE można stosować: • operatory porównania =, >=, > itp. • operatory logiczne AND i OR• do porównywania łańcuchów można stosować polecenie LIKE akceptujące wzorce napisów, w których znak ’_’ zastępuje dowolną literę, zaś znak ’%’ zastępuje dowolny ciąg znaków

SELECT * FROM osoby WHERE nazwisko LIKE 'A%'

zwróci wszystkie dane osób, których nazwisko rozpoczyna się na literę A.W "warunkach" można używać również operatora BETWEEN, który pozwala wybierać dane z określonego zakresu, np.:

SELECT * FROM osoby WHERE wiek BETWEEN 18 AND 30zwróci rekordy z osobami o wieku od 18 do 30 lat. Jest to równoważne z zapisem:

SELECT * FROM osoby WHERE wiek > 18 AND wiek < 30

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Język SQL – komenda UPDATEZmiana wierszy tabeli: UPDATE

● Składnia:

UPDATE table_name SET column1 = ‘value1’, column2 = ‘value2’, ... WHERE condition);

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Język SQL – komenda UPDATEZmiana wierszy tabeli: UPDATE

● Przykład:

UPDATE Osoby SET imie = ‘Katarzyna’, nazwisko = ‘Kwiatkowska’ WHERE id=2;);

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Język SQL – komenda DELETEUsuwanie wierszy tabeli: DELETE FROM

● Składnia:

DELETE FROM table_name WHERE condition ;

● Przykład:

DELETE FROM OSOBY WHERE imie = ‘Malgorzata’;

Usunie wszystkieMałgorzaty z tabeliOSOBY

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

● H2 umożliwia łączenie się z bazą z panelu kontrolnego z poziomu przeglądarki

● Wystarczy po instalacji odpalić program H2 Console, wtedy pojawią się następujące okienka:

http://www.h2database.com/html/quickstart.html

(plik z bazą musi być w katalogu domowym użytkownika)

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Java i bazy danych

● Mamy już język porozumiewania się z bazą danych (SQL).

● ...ale przecież chcąc porozumiewać się z bazą danych nie będziemy za każdym razem wpisywać komend w konsoli.

● Zwykle chcemy, by nasz program w wyniku np. naciśnięcia przycisku pobierał dane / odpowiednio modyfikował bazę danych.

● Chcielibyśmy więc bezpośrednio z poziomu kodu Javy wysyłać do bazy danych odpowiednie instrukcje.

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Java DataBase Connectivity● JDBC, ang. Java DataBase Connectivity, to

biblioteka stanowiąca interfejs umożliwiający aplikacjom napisanym w języku Java porozumiewać się z bazami danych za pomocą języka SQL.

● Interfejs ten operuje na poziomie typowego dla baz danych języka SQL i pozwala w prosty sposób konstruować zapytania do bazy danych oraz wykorzystywać ich wyniki w kodzie Javy.

● Środowisko Java zawiera API JDBC, natomiast użytkownik musi dodatkowo uzyskać sterownik JDBC dedykowany do swojej bazy danych.

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

JDBC – ogólna zasada wykorzystania

1. Uzyskanie połączenia ze źródłem danych

2. Wykonywanie operacji na bazie danych (przekazywanie poleceń w postaci kwerend SQL)

3. Przetwarzanie danych pobranych z bazy w efekcie wykonania kwerend

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

// Łączenie z bazą: Connection con = DriverManager.getConnection( "jdbc:myDriver:myDatabase", username, password);// Wykonywanie kwerendy: Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery( "SELECT a, b, c FROM Table1");// Przetwarzanie pobranych danych while (rs.next()) { int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c"); }

JDBC – ogólna zasada wykorzystania

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

// Łączenie z bazą: Connection con = DriverManager.getConnection( "jdbc:myDriver:myDatabase", username, password);// Wykonywanie kwerendy: Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery( "SELECT a, b, c FROM Table1");// Przetwarzanie pobranych danych while (rs.next()) { int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c"); }

JDBC – ogólna zasada wykorzystania

H2:"jdbc:h2:nazwabazy",username,passwordJeśli baza danych nie istnieje,

to próba podłączenia spowodujeutworzenie nowej pustej bazy

(w postaci pliku *.db).

MySQL:"jdbc:mysql://localhost/nazwabazy?user=username&password=password”

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Tworzenie bazy z poziomu JAVYTworzenieBazy.java

conn = DriverManager.getConnection("jdbc:h2:nazwabazy", "sa", "");// domyslnie nazwa uzytkownika to "sa" a dostep jest bez hasla - ""

// Proba podlaczenia do bazy H2, ktora nie istnieje // domyslnie powoduje utworzenie nowej instancji pustej bazy // (w postaci pliku z rozszerzeniem *.db, np. nazwabazy.h2.db)

// Dymyslne tworzenie pustej bazy danych czasem moze generowac bledy,// dlatego mozliwe jest wylaczenie domyslnego tworzenia pustej bazy// conn = DriverManager.getConnection("jdbc:h2:nazwabazy5;IFEXISTS=TRUE", "sa", "");

Program otwiera / tworzy bazę danych H2 ● o nazwie nazwabazy● nazwa użytkownika to sa● domyślnie bez hasła

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

// Łączenie z bazą: Connection con = DriverManager.getConnection( "jdbc:myDriver:myDatabase", username, password);// Wykonywanie kwerendy: Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery( "SELECT a, b, c FROM Table1");// Przetwarzanie pobranych danych while (rs.next()) { int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c"); }

JDBC – ogólna zasada wykorzystania

Query = Zapytanie, Kwerenda

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

// Łączenie z bazą: Connection con = DriverManager.getConnection( "jdbc:myDriver:myDatabase", username, password);// Wykonywanie kwerendy: Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery( "SELECT a, b, c FROM Table1");// Przetwarzanie pobranych danych while (rs.next()) { int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c"); }

JDBC – ogólna zasada wykorzystania

Język SQL

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Operacje na bazie z poziomu JAVYStatement stmt = con.createStatement();ResultSet rs = stmt.executeQuery("SELECT * FROM Tab1");

Trzy podstawowe metody wywołania kwerend:stmt.executeQuery(...), stmt.executeUpdate(...), stmt.execute(...)

● Różnią się to sposobem przekazywania wyniku. ● W pierwszym przypadku otrzymamy wynik w postaci tabeli

(wynik zapytania). ExecuteQuery stosuje się zazwyczaj do zapytań typu SELECT....

● W drugim przypadku otrzymamy ilość pomyślnie przeprowadzonych zmian w bazie. Update stosuje się zazwyczaj do zapytań typu CREATE TABLE... lub INSERT...

● Trzecia opcja jest uogólnieniem dwóch poprzednich. Zwraca wynik, z tym, że to użytkownik musi sprawdzić jaki wynik otrzymał.

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Execute

//Wyswietlanie calej tabeli:statement.execute("SELECT * FROM waluty");

//Ograniczenie do 10 pierwszych rekordowstatement.execute("SELECT * FROM waluty limit 10" );

// Przykladowe kwerendy z dodatkwoym warunkiem:statement.execute("SELECT * FROM waluty

where data < '2001-03-27'");statement.execute("SELECT * FROM waluty

where usd > 4.50");statement.execute("SELECT * FROM waluty

where usd > 4.50 and eur < 3.83");

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

TworzenieTabeli.java

Statement statement = conn.createStatement();// Usuwanie tabeli jeśli już istnieje - // kolejne uruchomienie przykladu nie wygeneruje bledu:statement.executeUpdate("DROP TABLE IF EXISTS `waluty`;");

// Tworzenie tabeli o okreslonej strukturze danychstatement.executeUpdate("CREATE TABLE `waluty` ("+ "`Id` int(6) unsigned NOT NULL auto_increment,"+ "`data` date default NULL,"+ "`USD` float default NULL,"+ "`EUR` float default NULL,"+ "`GBP` float default NULL,"+ "PRIMARY KEY (`Id`)"+") ;");

Program tworzy tabelę “waluty” i wypełnia przykładowymi wartościami.

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

TworzenieTabeli.javaDodawanie danych do tabeli:

statement.executeUpdate("INSERT INTO `waluty` (`Id`,`data`,`USD`,`EUR`,`GBP`) VALUES (1,'2000-01-03',4.1171,4.165,6.6576);"); // Przykladowe rownowazne polecenia SQL: statement.executeUpdateUpdate("INSERT INTO `waluty` VALUES (1,'2000-01-03',4.1171,4.165,6.6576);");

statement.executeUpdate("INSERT INTO `waluty` (`data`,`USD`,`EUR`,`GBP`) VALUES ('2000-01-03‘ , 4.1171 , 4.165, 6.6576 );");

statement.executeUpdate("INSERT INTO waluty VALUES (1,'2000-01-03',4.1171,4.165,6.6576);");

statement.executeUpdate("INSERT INTO waluty (Id,data,USD,EUR,GBP) VALUES (1,'2000-01-03',4.1171,4.165,6.6576);");

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Prepared StatementZamiast interfejsu Statement, w którym wykorzystujemy dokładną (statyczną) treść kodu SQL, można wykorzystać typ PreparedStatement, który pozwala na parametryzację. Użycie prekompilowanych komend jest wygodne, jeśli wywołujemy wiele podobnych komend na różnych argumentach, lub kiedy chcemy pobrać poszczególne wartości od użytkownika.

Co jest równoważne:

PreparedStatement prep = conn.prepareStatement ("INSERT into waluty(data, usd, eur, gbp) values (?, ?, ?, ?)"); prep.setString(1, "2000-01-03"); prep.setString(2, "4.1171"); prep.setString(3, "4.165"); prep.setString(4, "6.6576"); prep.executeUpdate();

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Prepared Statement – dodatkowa funkcjonalność

● Wyobraźmy sobie aplikację, do której użytkownik się loguje.

● Użytkownik podaje login (“name”) i hasło (“password”)a następnie uruchamiane jest zapytanie:

statement.execute("SELECT COUNT(*) FROM users WHERE name=" + name + "AND password=" + password); ResultSet rs = statement.getResultSet(); rs.next(); if (rs.getInt(1) == 0){ //niezalogowany }

A użytkownik wpisuje jako login:

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Prepared Statement – dodatkowa funkcjonalność

● Wyobraźmy sobie aplikację, do której użytkownik się loguje.

● Użytkownik podaje login (“name”) i hasło (“password”)a następnie uruchamiane jest zapytanie:

statement.execute("SELECT COUNT(*) FROM users WHERE name=" + name + "AND password=" + password); ResultSet rs = statement.getResultSet(); rs.next(); if (rs.getInt(1) == 0){ //niezalogowany }

● A użytkownik wpisuje jako login:"; DROP TABLE users; --"

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Prepared Statement – dodatkowa funkcjonalność

● A użytkownik wpisuje jako login:

● Czyli baza danych dostaje zapytanie:

"; DROP TABLE users; --"

SELECT COUNT(*) FROM users WHERE name=; DROP TABLE users;

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Prepared Statement – dodatkowa funkcjonalność

● A użytkownik wpisuje jako login:

● Czyli baza danych dostaje zapytanie:

"; DROP TABLE users; --"

SELECT COUNT(*) FROM users WHERE name=;

DROP TABLE users;

Zwróci informacjeo błędzie.

Usunie tabelę “users”.

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Prepared Statement

● Jeśli chcemy pobierać wartości od użytkownika to nigdy, nigdy

NIGDYnie tworzymy zapytań SQL z dodawania takich ciągów znaków.

– Należy używać polecenia PreparedStatement które zapewni, by podane przez użytkownika wartości nigdy nie zostanały ziterpretowane jako samodzielne polecenia SQL.

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

TworzenieTabeli.javaDodawanie danych do tabeli:

// Rownowazne wywolanie z wykorzystaniem PreparedStatement PreparedStatement prep = conn.prepareStatement("INSERT into waluty(data, usd, eur, gbp) values (?, ?, ?, ?)"); prep.setString(1, "2000-01-03"); prep.setString(2, textBoxUsd.Text); prep.setString(3, textBoxEur.Text); prep.setString(4, textBoxGbp.Text); prep.executeUpdate();

Używając PreparedStatementmożemy bezpiecznie brać dane

od użytkownika.

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

// Łączenie z bazą: Connection con = DriverManager.getConnection( "jdbc:myDriver:myDatabase", username, password);// Wykonywanie kwerendy: Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery( "SELECT a, b, c FROM Table1");// Przetwarzanie pobranych danych while (rs.next()) { int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c"); }

JDBC – ogólna zasada wykorzystania

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

ResultSet● Wyniki wykonanej kwerendy dostępne

są w obiekcie klasy ResultSet.

● ResultSet zawiera linie (rekordy) z wyniku wykonanej operacji.– Początkowo jest ustawiony przed pierwszą

linią. – Aby przesunąć go na następna linijkę i

przy okazji sprawdzić, czy jest więcej wyników, wykorzystuje się metodę next().

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

ResultSet, ResultSetMetaDataResultSet rs = statement.getResultSet();

ResultSetMetaData md = rs.getMetaData();

//wyswietlanie nazw kolumn:for (int ii = 1; ii <= md.getColumnCount(); ii++){

System.out.print(md.getColumnName(ii)+ " | ");}System.out.println();

// wyswietlanie poszczegolnych wierszywhile (rs.next()) {

for (int ii = 1; ii <= md.getColumnCount(); ii++){ System.out.print( rs.getObject(ii) + " | ");}

System.out.println();}

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

WypisywanieTabeli.java

//Wyswietlanie calej tabeli:statement.execute("SELECT * FROM waluty");

//Ograniczenie do 10 pierwszych rekordowstatement.execute("SELECT * FROM waluty limit 10" );

// Przykladowe kwerendy z dodatkwoym warunkiem:statement.execute("SELECT * FROM waluty

where data < '2001-03-27'");statement.execute("SELECT * FROM waluty

where usd > 4.50");statement.execute("SELECT * FROM waluty

where usd > 4.50 and eur < 3.83");

Jeśli chcemy wyświetlić wynik z każdego statement,to po każdym ‘execute’ musimy wyciągnąć ResultSet.

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

WypisywanieTabeli.java

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Wykres.java

Tworzenie pliku JAR – konieczny dostęp do pliku z bazą danych

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Informacje dodatkowe

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Nomenklatura obiektóww różnych terminologiach

Teoria relacyjna Model ER (Entity-Relationship)

Relacyjne bazy Aplikacje

Relacja Encja Tabela Klasa

Krotka Instancja Wiersz Instancja klasy (obiekt)

Atrybut Atrybut Kolumna Właściwość, atrybut

Dziedzina Dziedzina/typ Typ danych Typ danych

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Struktura JDBC

Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)

Klasy i interfejsy JDBC