88
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/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

Programowanie Obiektowe

JavaMałgorzata Janik

Zakład Fizyki Ją[email protected]

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

Page 2: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Bazy danychDBMS

H2SQL

JDBC

Page 3: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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

Page 4: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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)

Page 5: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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

Page 6: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Bazy danych

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

relacje, które reprezentowane są przez tablice

Page 7: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Bazy danych

● Relacyjne bazy danych

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

Page 8: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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

Page 9: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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

Page 10: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Relacyjne bazy danych

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

relacje, które reprezentowane są przez tablice

Id imie nazwisko data_urodzenia

1 Małgorzata Janik 1887

2 Helena Nowak 1984

osoby

Page 11: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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.

Page 12: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Bazy danych

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

● Chcemy ją zapisać w postaci cyfrowej

● Co robimy?

Photo by: Selmer van Alten

Page 13: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Bazy danych

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

chcemy ją zapisać.

Photo by: Selmer van Alten

– Bazy proste:● kartotekowe● hierarchiczne

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

Page 14: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Bazy danych

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

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

Photo by: Selmer van Alten

Page 15: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Bazy danych

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

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

Photo by: Selmer van Alten

Page 16: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Bazy danych

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

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

Popularne możliwości:→ Łatwe,

Photo by: Selmer van Alten

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

Page 17: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Bazy danych

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

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

Popularne możliwości:→ Łatwe,

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

Photo by: Selmer van Alten

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

na 345 możliwych

Page 18: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Baza danych H2

Page 19: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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.

Page 20: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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

Page 21: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Bazy danych

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

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

Np. → Łatwe, H2.– Tworzymy w DBMS wszystkie potrzebne

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

● Najbardziej popularnym językiem do komunikacji jest SQL.

Photo by: Selmer van Alten

Page 22: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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.

Page 23: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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

Page 24: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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 ( ; )

Page 25: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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ń)

Page 26: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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)

Page 27: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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

Język SQL – tworzenie przykładowej tabeli

Tworzenie tabeli: CREATE TABLE● Przykład:

id imie nazwisko

1 Jan Kowalski

2 Zofia Kwiatkowska

Page 28: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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):Tabelę 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.

Page 29: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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):Tabelę 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.

Page 30: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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

Page 31: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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.

Page 32: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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

Page 33: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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.

Page 34: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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

Page 35: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Id imie nazwisko data_urodzenia

1 Małgorzata Janik 1887

2 Helena Nowak 1984

osoby

Język SQL – tworzenie przykładowej tabeli

Page 36: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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

Page 37: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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

Page 38: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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

Id imie nazwisko data_urodzenia

1 Małgorzata Janik 1887

2 Helena Nowak 1984

Page 39: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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

Id imie nazwisko data_urodzenia

1 Małgorzata Janik 1887

2 Helena Nowak 1984

domyślnie NULL

Page 40: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

DROP TABLE IF EXISTS `Osoby`;

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

Język SQL – tworzenie przykładowej tabeli

Page 41: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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 danychTworzenie tabeli: INSERT INTO

● Składnia:

Page 42: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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.

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

Page 43: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Język SQL – komenda SELECTSELECT 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

Page 44: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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.

Page 45: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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 = 18;zwróci imiona osób, które mają 18 lat.

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

SELECT nazwisko, imie FROM osoby ORDER BY nazwisko DESC;zwró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)

Page 46: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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 30;zwró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;

Page 47: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Język SQL – komenda UPDATEZmiana wierszy tabeli: UPDATE

● Składnia:

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

Page 48: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Język SQL – komenda UPDATEZmiana wierszy tabeli: UPDATE

● Przykład:

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

Page 49: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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

Page 50: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

● 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)

Page 51: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Page 52: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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.

Page 53: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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.

Page 54: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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

Page 55: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

// Łą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

Page 56: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

// Łą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"); }

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”

JDBC – ogólna zasada wykorzystania

Page 57: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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

Page 58: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

// Łą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

Page 59: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

// Łą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"); }

Język SQL

JDBC – ogólna zasada wykorzystania

Page 60: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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ł.

Page 61: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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");

Page 62: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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.

Page 63: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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.executeUpdate("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);");

Page 64: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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();

Page 65: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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:

Page 66: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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; --"

drop table users;

Page 67: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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;

Page 68: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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”.

Page 69: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

"; DROP TABLE users; --"

SELECT COUNT(*) FROM users WHERE name=;

DROP TABLE users; Usunie tabelę “users”.

Page 70: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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.

Page 71: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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.

Page 72: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

// Łą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

Page 73: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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().

Page 74: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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();}

Page 75: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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.

Page 76: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

WypisywanieTabeli.java

Page 77: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

QUIZ

Page 78: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Czym jest?

● DBMS● H2● SQL● JDBC

● Język zapytań● System zarządzania

bazą danych● Biblioteka umożliwiająca

łączenie się z bazą danych za pomocą Javy

● Baza danych

Page 79: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Czym jest?

● DBMS● H2● SQL● JDBC

● Język zapytań – do porozumiewania się z bazą danych

● System zarządzania bazą danych (np. MySQL, Oracle, H2)

● Biblioteka umożliwiająca łączenie się z bazą danych za pomocą Javy

● Baza danych (przykład DBMS)

Page 80: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Czym jest?

● Kwerenda (query)● Krotka (tuple)● Relacja● Klucz podstawowy

● Tabela● Wiersz z tabeli

(uporządkowany ciąg wartości)

● Zapytanie mające na celu np. pobranie danych, usuwanie, modyfikację.

● Minimalny zestaw atrybutów jednoznacznie identyfikujący każdą krotkę

Page 81: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Czym jest?

● Kwerenda (query)● Krotka (tuple)● Relacja● Klucz podstawowy

● Tabela● Wiersz z tabeli

(uporządkowany ciąg wartości)

● Zapytanie mające na celu np. pobranie danych, usuwanie, modyfikację.

● Minimalny zestaw atrybutów jednoznacznie identyfikujący każdą krotkę

Page 82: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Do czego służy?

● INSERT INTO● SELECT * FROM

● DROP TABLE● CREATE TABLE● UPDATE

Page 83: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Do czego służy?

● INSERT INTO● SELECT * FROM

● DROP TABLE● CREATE TABLE● UPDATE

● Dodanie wiersza do tabeli● Wyciągnięcie danych z bazy

danych● Usunięcie tabeli● Stworzenie tabeli● Modyfikacja wiersza tabeli

Page 84: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Dziękuję za Uwagę!

To już ostatni wykład.Dziękuję wszystkim za uczestnictwo i

powodzenia na laboratoriach!

Page 85: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Informacje dodatkowe

Page 86: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

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

Page 87: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Struktura JDBC

Page 88: Programowanie Obiektowe Javajava.fizyka.pw.edu.pl/data/_uploaded/data/Wyklady2019/... · 2019. 4. 1. · Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 3/128 Bazy danych

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

Klasy i interfejsy JDBC