94
1 Java Database Connectivity with JDBC Obsah 1 Úvod 2 Relační-databázový model 3 Relační databaze přehled: databáze knih 4 SQL 4.1 Základní SELECT Query 4.2 klauzule WHERE 4.3 klauzule ORDER BY 4.4 Výběr dat (Merging Data) z více tabulek: INNER JOIN 4.5 příkaz INSERT 4.6 příkaz UPDATE 4.7 příkaz DELETE 5 Práce s databází pomocí JDBC 5.1 Připojení a dotazy v databázi 5.2 Dotazy v databázi (knihy) books 6 Uložené procedury 7 Objektově relační mapování

Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

1Java Database Connectivity with JDBC

Obsah1 Úvod2 Relační-databázový model3 Relační databaze přehled: databáze knih4 SQL

4.1 Základní SELECT Query4.2 klauzule WHERE 4.3 klauzule ORDER BY4.4 Výběr dat (Merging Data) z více tabulek: INNER JOIN4.5 příkaz INSERT 4.6 příkaz UPDATE 4.7 příkaz DELETE

5 Práce s databází pomocí JDBC5.1 Připojení a dotazy v databázi5.2 Dotazy v databázi (knihy) books

6 Uložené procedury7 Objektově relační mapování

Page 2: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

2

1 Úvod

• Databáze– Kolekce dat

• DBMS– Systém řízení databáze (Database management system)

– Ukládá a řídí data

• SQL– Relational database

– Structured Query Language (strukturovaný dotazovacíjazyk)

Page 3: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

3

1 Úvod

• RDBMS– Relational database management system

– Cloudscape 5.0.4• www.ibm.com/software/data/cloudscape

• JDBC– Java Database Connectivity

– JDBC driver

Page 4: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

4

2 Relační databázový model

• Relační databáze– Tabulka

• Řádky, sloupce

– Primární klíč• jedinečná data

• SQL příkaz– dotaz (query)

Page 5: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

5

2 Relační databázový model

Obr. 1 Tabulka Employee – vzorek dat

Number Name Department Salary Location

23603 Jones 413 1100 New Jersey

24568 Kerwin 413 2000 New Jersey

34589 Larson 642 1800 Los Angeles

35761 Myers 611 1400 Orlando

47132 Neumann 413 9000 New Jersey

78321 Stephens 611 8500 Orlando

Row

ColumnPrimary key

Page 6: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

6

2 Relační databázový model

Obr. 2 Výsledek vyběru rozdílnýchDepartment a Location z tabulky Employee.

Department Location

413 New Jersey

611 Orlando

642 Los Angeles

Page 7: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

7

3 Relační databáze p řehled: databáze books

• Vzorek databáze books– Čtyři tabulky

• authors, publishers, authorISBN a titles

– Relace (vztahy) mezi tabulkami

Page 8: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

8

3 Relační databáze p řehled: databáze books

Sloupec Popis authorID AuthorID je číselna identifikace autora v databázi. V databázi books

je to celé číslo, které je definované jako autoinkrementovatelné. Tím je dosaženo jedinečnosti tohoto čísla. Sloupec představuje primární klíč.

firstName Jméno autora (string). lastName Přijmení autora ( string). Obr. 3 tabulka authorsauthorsauthorsauthors databáze books.

authorIDauthorIDauthorIDauthorID firstNamefirstNamefirstNamefirstName lastNamelastNamelastNamelastName 1 Harvey Deitel 2 Paul Deitel 3 Tem Nieto 4 Sean Santry Obr. 4 Vzorek dat z tabulky authors.

Page 9: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

9

3 Relační databáze p řehled: databáze books

Sloupec Popis publisherID PublisherID je celé autoinkrementovatelné

číslo v databázi books. Sloupec je využit jako primární klíč.

publisherName Jméno nakladatele ( string). Obr. 5 publisherspublisherspublisherspublishers tabulka z databáze books.

publisherID publisherName1 Prentice Hall2 Prentice Hall PTGObr. 6 Data z tabulky publishers.

Page 10: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

10

3 Relační databáze p řehled: databáze books

Sloupec Popis isbn ISBN knihy ( string). Primární klíč v tabulce. title Název knihy ( string). editionNumber Ediční číslo knihy ( integer). copyright Copyright rok knihy ( string). publisherID Číslo publisherID ( integer). Cizí klíč k tabulce

publishers. imageFile Jméno souboru obsahujícího obrázek titulní strany

knihy (string). price Doporučená cena knihy ( real number). Obr. 7 tabulka titlestitlestitlestitles z databáze books.

Page 11: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

11

3 Relační databáze p řehled: databáze books

isbnisbnisbnisbn titletitletitletitle editioneditioneditionedition----NumberNumberNumberNumber

copycopycopycopy----rightrightrightright

publishpublishpublishpublish----erIDerIDerIDerID

imageFileimageFileimageFileimageFile pricepricepriceprice

0130895725 C How to Program

3 2001 1 chtp3.jpg 74.95

0130384747 C++ How to Program

4 2002 1 cpphtp4.jpg 74.95

0130461342 Java Web Services for Experienced Programmers

1 2002 1 jwsfep1.jpg 54.95

0131016210 Java How to Program

5 2003 1 jhtp5.jpg 74.95

0130852473 The Complete Java 2 Training Course

5 2002 2 javactc5.jpg 109.95

0130895601 Advanced Java 2 Platform How to Program

1 2002 1 advjhtp1.jpg 74.95

Obr. 8 Vzorek dat z tabulky titles databáze books.

Page 12: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

12

3 Relační databáze p řehled: databáze books

Sloupec Popis authorID AuthorID je číslo, cizí klíč k tabulce authors. isbn ISBN knihy je cizí klíč k tabulce titles.. Obr. 9 tabulka authorISBNauthorISBNauthorISBNauthorISBN databáze books.

authorID isbn authorID isbn1 0130895725 2 01391630502 0130895725 3 01308292932 0132261197 3 01302841732 0130895717 3 01302841812 0135289106 4 0130895601Obr. 10 Vzorek dat z tabulky authorISBN databáze books.

Page 13: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

13

3 Relační databáze p řehled: databáze books

Obr. 11 Tabulka relací v databázibooks .

authorISBN

authorID

isbn

authors

authorID

firstName

lastName

publishers

publisherID

publisherName

titles

isbn

title

editionNumber

copyright

publisherID

imageFile

price

1 8 1

8

18

Page 14: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

14

4 SQL

• SQL přehled

• SQL klíčová slova

SQL klíčová slova PopisSELECT Dodá data z jedné nebo více tabulek.FROM Specifikuje tabulky zahrnuté do dotazu. Vyžaduje

SELECT. WHERE Kritéria pro výběr který určí, kteréřádky mají být

dodány zpět, rušeny nebo aktualizovány.GROUP BY Kritéria pro seskupovánířádků.ORDER BY CKritéria pro řazenířádků.INNER JOIN Výběr řádků z více tabulek.INSERT Vlořenířádků do dané tabulky.UPDATE Aktualizace řádků v dané tabulce.DELETE Rušenířádků z dané tabulky.Obr. 12 SQL klíčová slova dotazů.

Page 15: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

15

4.1 Základní SELECT Query

• Nejjednodušší forma SELECT query– SELECT* FROMjménoTabulky

• SELECT* FROMauthors

• Vybere specifikované položky z tabulky– SELECTauthorID , lastName FROMauthors

authorID lastName1 Deitel2 Deitel3 Nieto4 SantryObr. 13 Vzorek authorID a lastName data z

authors tabulky.

Page 16: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

16

4.2 Klauzule WHERE

• určuje kritéria výběru– SELECTjménoSloupce1, jménoSloupce2, … FROM

jménoTabulkyWHEREkritéria• SELECTtitle, editionNumber, copyright

FROMtitles

WHEREcopyright > 2000

• klauzule WHERE– podmínkové operátory– <, >, <=, >=, =, <>– LIKE

• znaky wildcard % a _

Page 17: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

17

4.2 Klauzule WHERE

titletitletitletitle editionNumbereditionNumbereditionNumbereditionNumber copyrightcopyrightcopyrightcopyright C How to Program 3 2001 C++ How to Program 4 2002 The Complete C++ Training Course

4 2002

Internet and World Wide Web How to Program

2 2002

Java How to Program 5 2003 XML How to Program 1 2001 Perl How to Program 1 2001 Advanced Java 2 Platform How to Program

1 2002

Obr. 14 Vzorek názvů s copyrights po roce after 2000 z tabulky titles.

Page 18: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

18

4.2 Klauzule WHERE

• SELECTauthorID, firstName, lastName

FROMauthors

WHERElastNameLIKE ‘D%’

authorID firstName lastName1 Harvey Deitel2 Paul DeitelObr. 15 Autoři jejichž přijmení začíná D z tabulky

authors .

Page 19: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

19

4.2 Klauzule WHERE

• SELECTauthorID, firstName, lastName

FROMauthors

WHERElastNameLIKE ‘_i%’

authorID firstName lastName3 Tem NietoObr. 16 Jediný autor z tabulku authors

jehož přijmení obsahuje i jako druhé písmeno.

Page 20: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

20

4.3 Klauzule ORDER BY

• Volitelná klauzule ORDER BY– SELECTjménoSloupce1, jménoSloupce2, … FROM

jménoTabulkyORDER BYsloupecASC

– SELECTjménoSloupce1, jménoSloupce2, … FROMjménoTabulkyORDER BYsloupecDESC

• ORDER BYvíce položek– ORDER BYcolumn1 sortingOrder, column2 sortingOrder,

• Kombinace klauzulíWHEREa ORDER BY

Page 21: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

21

4.3 Klauzule ORDER BY

• SELECTauthorID, firstName, lastName

FROMauthors

ORDER BYlastNameASC

authorID firstName lastName2 Paul Deitel1 Harvey Deitel3 Tem Nieto4 Sean SantryObr. 17 Vzorek dat z tabulky authors v

vzestupném pořadí podle lastName.

Page 22: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

22

4.3 Klauzule ORDER BY

• SELECTauthorID, firstName, lastName

FROMauthors

ORDER BYlastNameDESC

authorID firstName lastName4 Sean Santry3 Tem Nieto2 Paul Deitel1 Harvey DeitelObr.18 Vzorek dat z tabulky authors v

sestupném pořadí podle lastName.

Page 23: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

23

4.3 Klauzule ORDER BY

• SELECTauthorID, firstName, lastName

FROMauthors

ORDER BYlastName, firstName

authorID firstName lastName1 Harvey Deitel2 Paul Deitel3 Tem Nieto4 Sean SantryObr. 19 Vzorek dat tabulky authors v

vzestupném pořadí podle lastName a podle firstName.

Page 24: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

24

4.3 Klauzule ORDER BY

• SELECTisbn, title, editionNumber, copyright, price

FROMtitles WHEREtitle LIKE ‘%How to Program’

ORDER BYtitle ASCisbn title edition-

Numbercopy-right

price

0130895601 Advanced Java 2 Platform How to Program 1 2002 74.950130895725 C How to Program 3 2001 74.950130384747 C++ How to Program 4 2002 74.950130308978 Internet and World Wide Web How to

Program2 2002 74.95

0130284181 Perl How to Program 1 2001 74.950134569555 Visual Basic 6 How to Program 1 1999 74.950130284173 XML How to Program 1 2001 74.95013028419x e-Business and e-Commerce How to

Program1 2001 74.95

Obr. 20 Vzorek knih z tabulky titles, jejíž názvy končí s textem How toProgram v vzestupném pořadí řazeném podle názvů (titulů).

Page 25: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

254.4 Výběr dat z více tabulekMerging Data from Multiple Tables: Joining

• Rozdělit příbuzná data do oddělených tabulek

• Spojit tabulky– Vybrat data z více tabulek do jednoho pohledu (přehledu)

– INNER JOIN• SELECTsloupecJméno1, sloupecJméno2, …

FROMtabulka1

INNER JOIN tabulka2

ONtabulka1.sloupecJméno= table2.sloupecJméno2• SELECTfirstName, lastName, isbn

FROMauthors, authorISBN

INNER JOIN authorISBN

ONauthors.authorID = authorISBN.authorID

ORDER BYlastName, firstName

Page 26: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

264.4 Výběr dat z více tabulekMerging Data from Multiple Tables: Joining

firstNamefirstNamefirstNamefirstName lastNamelastNamelastNamelastName isbnisbnisbnisbn firstNamefirstNamefirstNamefirstName lastNamelastNamelastNamelastName isbnisbnisbnisbn Harvey Deitel 0130895601 Paul Deitel 0130895717 Harvey Deitel 0130284181 Paul Deitel 0132261197 Harvey Deitel 0134569555 Paul Deitel 0130895725 Harvey Deitel 0139163050 Paul Deitel 0130829293 Harvey Deitel 0135289106 Paul Deitel 0134569555 Harvey Deitel 0130895717 Paul Deitel 0130829277 Harvey Deitel 0130284173 Tem Nieto 0130161438 Harvey Deitel 0130829293 Tem Nieto 013028419x Paul Deitel 0130852473 Sean Santry 0130895601 Obr. 21 Vzorek authors a ISBN pro knihy, které autoři napsali, autoři

sjou uvedeni ve vzestupném pořadí podle lastName a firstName.

Page 27: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

27

4.5 Příkaz INSERT

• Vkládářádek do tabulky– INSERT INTO tableName( columnName1, … ,

columnNameN)

VALUES( value1, … , valueN)• INSERT INTO authors ( firstName, lastName )

VALUES( ‘Sue’, ‘Smith’ )authorID firstName lastName1 Harvey Deitel2 Paul Deitel3 Tem Nieto4 Sean Santry5 Sue SmithObr. 22 Vzorek dat z tabulky Authors po operaci

INSERT.

Page 28: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

28

4.6 Příkaz UPDATE

• Modifikuje data v tabulce– UPDATEtableName

SETcolumnName1= value1, … , columnNameN= valueN

WHEREcriteria• UPDATEauthors

SET lastName = ‘Jones’

WHERElastName = ‘Smith’ ANDfirstName = ‘Sue’authorID firstName lastName1 Harvey Deitel2 Paul Deitel3 Tem Nieto4 Sean Santry5 Sue JonesObr. 23 Vzorek dat tabulky authors po operaci update.

Page 29: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

29

4.7 Příkaz DELETE

• Odstranění dat z tabulky– DELETE FROMtableNameWHEREcriteria

• DELETE FROMauthors

WHERElastName = ‘Jones’ANDfirstName = ‘Sue’

authorID firstName lastName1 Harvey Deitel2 Paul Deitel3 Tem Nieto4 Sean SantryObr. 24 Vzorek dat z tabulky authors po operaci DELETE.

Page 30: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

30

5 Práce s databází pomocí rozhraní JDBC

• Navázání spojení s databází

• Zaslání dotazů a příkazů pro aktualizaci databázi

• Zobrazení výsledků dotazu

Page 31: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

OsnovaConnection Connection Connection Connection ccccoooon = n = n = n = DriverManager.getConnectionDriverManager.getConnectionDriverManager.getConnectionDriverManager.getConnection

((((““““jdbc:myDriver:wombatjdbc:myDriver:wombatjdbc:myDriver:wombatjdbc:myDriver:wombat””””, , , , ““““myLoginmyLoginmyLoginmyLogin””””, , , , ““““myPasswordmyPasswordmyPasswordmyPassword””””););););

Statement stmt = Statement stmt = Statement stmt = Statement stmt = con.createStatementcon.createStatementcon.createStatementcon.createStatement();();();();

ResultSetResultSetResultSetResultSet rsrsrsrs = = = = stmt.executeQuery(stmt.executeQuery(stmt.executeQuery(stmt.executeQuery(““““SELECTSELECTSELECTSELECT a, b, c FROM Table1a, b, c FROM Table1a, b, c FROM Table1a, b, c FROM Table1””””););););

while(rs.nextwhile(rs.nextwhile(rs.nextwhile(rs.next()) {()) {()) {()) {

intintintint x = x = x = x = rs.getInt(rs.getInt(rs.getInt(rs.getInt(““““aaaa””””););););

String s = String s = String s = String s = rs.getString(rs.getString(rs.getString(rs.getString(““““bbbb””””););););

float f = float f = float f = float f = rs.getFloat(rs.getFloat(rs.getFloat(rs.getFloat(““““cccc””””););););

}}}}

Fragment kódu -názorný p říklad uvedených krok ů

Page 32: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

32

Fragment kódu

• vytváří instanci (objekt) od třídy DriverManagerpro připojení ke driveru databáze a logování do databáze

• vytváří instanci od třídy Statement, která provádízadaný dotaz SQL v databázi

• vytváří instanci od třídy ResultSet, která získá zpět výsledky dotazu a zobrazí je

Page 33: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

33

5. Ovlada če JDBC

• Nejdůležitější součástí balíčku java.sql je kolekce jeho rozhraní

• tato rozhraní definují způsob, jakým aplikace s relačními DB komunikují

• jedním z rozhraní je i rozhraní Driver – obsahuje metodu pro databázové připojení

• „ovladač JDBC“ – souhrnné označení skupiny souvisejících souborů, které poskytují přístup k DBMS – (obsahují nejen implementaci rozhraní java.sql, ale i

podpůrné třídy napojení na DB)

Page 34: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

34Typy ovlada čů1. Připojení prost řednictvím zdroje dat ODBC

• Ovladač přemostění JDBC/ODBC (OpenDatabase Connectivity od Microsoft) JDBC-ODBC bridge driver – ODBC – součást systému Windows – nastavení

ovládací panely, nástroje pro správu, datové zdroje ODBC

• není příliš robustní – dostatečný pro prováděnítestů a jednoduchých aplikací

• Nevýhoda – nutnost instalace ovladačů ODBC na klientském počítači (ve Windows není problém, v jiných platformách ano)

Page 35: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

35Typy ovlada čů2. Připojení prost řednictvím kódu nativního klienta

pro p řístup k síti

• Většina DB systémů poskytuje klientské rozhraníumožňující uživatelům komunikovat s DB serverem

• Ovladač JDBC 2. typy obsahuje jednak kód v jazyce Java, jednak nativní kód a komunikuje s klientským softwarem příslušného DB systému.

• Nabízí lepší výkon než ovladače typu 1, ale může ztížit distribuci aplikace – na cílovém počítači musí být nainstalován rovněž klientský síťový software daného systému (Oracle)

Page 36: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

36Typy ovlada čů3. Připojení prost řednictvím vrstvy aplika čního

serveru

• Tento typ ovladače napsán kompletně v Javě

• odesílá databázové požadavky serverovékomponentě

• za přenos databázových požadavků do formátu vhodného pro daný databázový systém –odpovědna serverová komponenta

• nevýhoda – nutnost existence serverovékomponenty

• výhoda – možnost změny DB serveru bez ovlivnění funkcí klientského kódu

Page 37: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

37Typy ovlada čů4. Přímé připojení k databázovému systému

• Ovladač napsán celý v jazyce Java

• komunikuje přímo s DB serverem a komu používáprotokol určený právě pro tento typ serveru

• ve stejném balíčku vaše aplikace a ovladač

• nevyžaduje žádný další klientský ani serverový software

Page 38: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

38

5.1 Připojení a tvorba dotaz ů v databázi

• Zobrazení autorů (DisplayAuthors)– Získání celé tabulky authors

– Zobrazení dat v JTextArea

Page 39: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

Osnova// // // // zobrazizobrazizobrazizobrazi obsahobsahobsahobsah tabulkytabulkytabulkytabulky authorsauthorsauthorsauthors

package paket1;package paket1;package paket1;package paket1;

import import import import java.sql.Connectionjava.sql.Connectionjava.sql.Connectionjava.sql.Connection;;;;

import import import import java.sql.Statementjava.sql.Statementjava.sql.Statementjava.sql.Statement;;;;

import import import import java.sql.DriverManagerjava.sql.DriverManagerjava.sql.DriverManagerjava.sql.DriverManager;;;;

import import import import java.sql.ResultSetjava.sql.ResultSetjava.sql.ResultSetjava.sql.ResultSet;;;;

import import import import java.sql.ResultSetMetaDatajava.sql.ResultSetMetaDatajava.sql.ResultSetMetaDatajava.sql.ResultSetMetaData;;;;

import import import import java.sql.SQLExceptionjava.sql.SQLExceptionjava.sql.SQLExceptionjava.sql.SQLException;;;;

public class public class public class public class DisplayAuthorsDisplayAuthorsDisplayAuthorsDisplayAuthors

{{{{

// JDBC // JDBC // JDBC // JDBC jmenojmenojmenojmeno driverudriverudriverudriveru a URL a URL a URL a URL databazedatabazedatabazedatabaze

static final String JDBC_DRIVER = "static final String JDBC_DRIVER = "static final String JDBC_DRIVER = "static final String JDBC_DRIVER = "com.mysql.jdbc.Drivercom.mysql.jdbc.Drivercom.mysql.jdbc.Drivercom.mysql.jdbc.Driver"; "; "; ";

static final String DATABASE_URL = "static final String DATABASE_URL = "static final String DATABASE_URL = "static final String DATABASE_URL = "jdbc:mysql://localhost/booksjdbc:mysql://localhost/booksjdbc:mysql://localhost/booksjdbc:mysql://localhost/books";";";";

// // // // spustenispustenispustenispusteni aplikaceaplikaceaplikaceaplikace

public static void main( String public static void main( String public static void main( String public static void main( String argsargsargsargs[] )[] )[] )[] )

{{{{

Connection Connection Connection Connection connectionconnectionconnectionconnection = null; = null; = null; = null;

Statement Statement Statement Statement statementstatementstatementstatement = null; = null; = null; = null;

// // // // pripojenipripojenipripojenipripojeni do do do do databazedatabazedatabazedatabaze books a books a books a books a dotazovanidotazovanidotazovanidotazovani databazedatabazedatabazedatabaze

try try try try

{{{{

Class.forNameClass.forNameClass.forNameClass.forName( JDBC_DRIVER ); ( JDBC_DRIVER ); ( JDBC_DRIVER ); ( JDBC_DRIVER ); // // // // nanananačtentententeníííí ovladaovladaovladaovladače e e e databazedatabazedatabazedatabaze mysqlmysqlmysqlmysql

Page 40: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

Osnova// // // // vytvorenivytvorenivytvorenivytvoreni pripojenipripojenipripojenipripojeni k k k k databazidatabazidatabazidatabazi

connection = connection = connection = connection =

DriverManager.getConnectionDriverManager.getConnectionDriverManager.getConnectionDriverManager.getConnection( DATABASE_URL, "jhtp6", "jhtp6" );( DATABASE_URL, "jhtp6", "jhtp6" );( DATABASE_URL, "jhtp6", "jhtp6" );( DATABASE_URL, "jhtp6", "jhtp6" );

// // // // vytvorenivytvorenivytvorenivytvoreni instance Statement pro instance Statement pro instance Statement pro instance Statement pro dotazovanidotazovanidotazovanidotazovani v v v v databazidatabazidatabazidatabazi

statement = statement = statement = statement = connection.createStatementconnection.createStatementconnection.createStatementconnection.createStatement();();();();

// // // // databazovedatabazovedatabazovedatabazove dotazydotazydotazydotazy

ResultSetResultSetResultSetResultSet resultSetresultSetresultSetresultSet = = = = statement.executeQuerystatement.executeQuerystatement.executeQuerystatement.executeQuery( ( ( (

"SELECT "SELECT "SELECT "SELECT authorIDauthorIDauthorIDauthorID, , , , firstNamefirstNamefirstNamefirstName, , , , lastNamelastNamelastNamelastName FROM authors" );FROM authors" );FROM authors" );FROM authors" );

// // // // zpracovanizpracovanizpracovanizpracovani vysledkuvysledkuvysledkuvysledku dotazudotazudotazudotazu

ResultSetMetaDataResultSetMetaDataResultSetMetaDataResultSetMetaData metaDatametaDatametaDatametaData = = = = resultSet.getMetaDataresultSet.getMetaDataresultSet.getMetaDataresultSet.getMetaData();();();();

intintintint numberOfColumnsnumberOfColumnsnumberOfColumnsnumberOfColumns = = = = metaData.getColumnCountmetaData.getColumnCountmetaData.getColumnCountmetaData.getColumnCount();();();();

System.out.printlnSystem.out.printlnSystem.out.printlnSystem.out.println( "Authors Table of Books Database:" );( "Authors Table of Books Database:" );( "Authors Table of Books Database:" );( "Authors Table of Books Database:" );

for ( for ( for ( for ( intintintint i = 1; i <= i = 1; i <= i = 1; i <= i = 1; i <= numberOfColumnsnumberOfColumnsnumberOfColumnsnumberOfColumns; i++ ); i++ ); i++ ); i++ )

System.out.printfSystem.out.printfSystem.out.printfSystem.out.printf( "%( "%( "%( "%----8s8s8s8s\\\\t", t", t", t", metaData.getColumnNamemetaData.getColumnNamemetaData.getColumnNamemetaData.getColumnName( i ) );( i ) );( i ) );( i ) );

System.out.printlnSystem.out.printlnSystem.out.printlnSystem.out.println();();();();

while ( while ( while ( while ( resultSet.nextresultSet.nextresultSet.nextresultSet.next() ) () ) () ) () )

{{{{

for ( for ( for ( for ( intintintint i = 1; i <= i = 1; i <= i = 1; i <= i = 1; i <= numberOfColumnsnumberOfColumnsnumberOfColumnsnumberOfColumns; i++ ); i++ ); i++ ); i++ )

System.out.printfSystem.out.printfSystem.out.printfSystem.out.printf( "%( "%( "%( "%----8s8s8s8s\\\\t", t", t", t", resultSet.getObjectresultSet.getObjectresultSet.getObjectresultSet.getObject( i ) );( i ) );( i ) );( i ) );

System.out.printlnSystem.out.printlnSystem.out.printlnSystem.out.println();();();();

} // end while} // end while} // end while} // end while

} // end try} // end try} // end try} // end try

Page 41: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

Osnovacatch ( catch ( catch ( catch ( SQLExceptionSQLExceptionSQLExceptionSQLException sqlExceptionsqlExceptionsqlExceptionsqlException ) ) ) )

{{{{

sqlException.printStackTracesqlException.printStackTracesqlException.printStackTracesqlException.printStackTrace();();();();

System.exitSystem.exitSystem.exitSystem.exit( 1 );( 1 );( 1 );( 1 );

} // end catch} // end catch} // end catch} // end catch

catch ( catch ( catch ( catch ( ClassNotFoundExceptionClassNotFoundExceptionClassNotFoundExceptionClassNotFoundException classNotFoundclassNotFoundclassNotFoundclassNotFound ) ) ) )

{{{{

classNotFound.printStackTraceclassNotFound.printStackTraceclassNotFound.printStackTraceclassNotFound.printStackTrace(); (); (); ();

System.exitSystem.exitSystem.exitSystem.exit( 1 );( 1 );( 1 );( 1 );

} // end catch} // end catch} // end catch} // end catch

finally finally finally finally // test, // test, // test, // test, zdazdazdazda statement a connection statement a connection statement a connection statement a connection jsoujsoujsoujsou spravnespravnespravnespravne uzavreniuzavreniuzavreniuzavreni

{ { { {

try try try try

{ { { {

statement.closestatement.closestatement.closestatement.close(); (); (); ();

connection.closeconnection.closeconnection.closeconnection.close(); (); (); ();

} // end try } // end try } // end try } // end try

catch ( Exception catch ( Exception catch ( Exception catch ( Exception exceptionexceptionexceptionexception ) ) ) )

{ { { {

exception.printStackTraceexception.printStackTraceexception.printStackTraceexception.printStackTrace(); (); (); ();

System.exitSystem.exitSystem.exitSystem.exit( 1 ); ( 1 ); ( 1 ); ( 1 );

} // end catch } // end catch } // end catch } // end catch

} // end finally } // end finally } // end finally } // end finally

} // end main} // end main} // end main} // end main

} // end class } // end class } // end class } // end class DisplayAuthorsDisplayAuthorsDisplayAuthorsDisplayAuthors

Page 42: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

OsnovaAuthorAuthorAuthorAuthors Table of Books Database:s Table of Books Database:s Table of Books Database:s Table of Books Database:authorIDauthorIDauthorIDauthorID firstNamefirstNamefirstNamefirstName lastNamelastNamelastNamelastName1111 HarveyHarveyHarveyHarvey DeitelDeitelDeitelDeitel2222 PaulPaulPaulPaul DeitelDeitelDeitelDeitel3333 TemTemTemTem NietoNietoNietoNieto4444 SeanSeanSeanSean SantrySantrySantrySantry

Page 43: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

43

Navázání spojení s databází

• k navázání spojení s databází se používá rozhraníDriver

• metody tohoto rozhraní se nepoužívají přímo, ale prostřednictvím statické třídy DriverManagera její statické metody getConnection()

• ta vrací objekt typu Connection

• metoda getConnection()předává argumenty všem registrovaným ovladačům, dokud nenajde ten, jehož prostřednictvím se mu podaří navázat spojení s uvedenými argumenty

Page 44: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

44

Navázání spojení s databází

• ovladač není explicitně registrovaný

• ovladač se vytvoří explicitně vytvořením jehiinstance:Class.forName( JDBC_DRIVER);

Page 45: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

45

Formáty adres URL ovlada čů JDBC

• metoda getConnection() má tři varianty (podle zadaných argumentů)1. adresa URL ovladače ODBC

2. ID uživatele – pro darabázi

3. heslo – pro databázi

• adresa URL specifikuje databázi – hodnota typu String identifikující konkrétní ovladač JDBC a databázi

• tvar: jdbc:<podprotokol>:<podnázev>

Page 46: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

46

Formáty adres URL ovlada čů JDBC

• hodnoty <podprotokol> a <podnázev> jsou závisléna databázi a použitém ovladači"jdbc:mysql://localhost/books";

• navázání spojení:• connection = DriverManager.getConnection( DATABASE_URL, "jhtp6", "jhtp6" );

Page 47: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

47

Rozhraní DatabaseMetaDataDatabaseMetaDataDatabaseMetaDataDatabaseMetaData

• definované metody umožňují zjistit:– možnosti DB systému a příslušného ovladače,

– popis obsahu databáze (seznam schémat DB, seznam tabulek, seznam sloupců v jednotlivých tabulkách, datový typ sloupců

Page 48: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

48Struktura metod rozhraníDatabaseMetaData

1. metody sloužící k popisu funkcí a vlastností BD systému – vrací většinou boolean, int String

• supportOuterJoins(), getMaxConnections()

2. metody popisující obsah DB – vrací objekt typu ResultSet (rozhraní)– getSchemas(), getTables()

Page 49: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

49

Třída Statement

• po připojení k DB – objekt typu Statement –umožňuje vykonávat příkazy jazyka SQL

• instanci třídy Statement se vytvoří metodou createStatement()

• metody:– executeQuery(a String);

– executeUpdate(a String);

– execute(a String);

Page 50: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

50

Třída ResultSet

• instance této třídy mohou být výsledkem spuštěnímetody executeQuery(),nebo execute()– vracívíce instancí třídy ResultSet

• vrácená data je možné zpracovat po řádcích, záznamech

• aktuální záznam –current row/ current record

• po vytvoření instance ResutlSet – její kurzor nastaven na 1. záznam (objekt)

• objekty ResultSetvětšinou zůstávají v databázovém serveru, pouze aktuální záznam je přenesen

Page 51: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

51

Práce s objektem ResultSet

• Navigace mezi záznamy:– next() – vrací boolean, zda existuje další záznam

• Načítání dat:– getXXX() načítání dat z aktuálního záznamu

– pro každý typ (třídu) existuje speciální metoda

– getObject()

– každá getXXX() obsahuje dvě implementace:• celočíselný argument – index sloupce

• String argument – název sloupce

• Úprava dat:– metody prefix updateXXX()

Page 52: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

52

Rozhraní ResultSetMetaDataResultSetMetaDataResultSetMetaDataResultSetMetaData

• použití k dalšímu získání informací o databázi ve výsledku dotazu– popis jednotlivých sloupců

– název sloupců

– typ dat sloupců

– počet sloupců

Page 53: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

53

Zobrazení autor ů

• Aplikace musí nahrát DB driver před připojením k databázi

• 25ř. – statická metoda forName - nahrávání třídy DB ovladače

• je nutné přidat – mysql-connector-java-3.0.14-production-bin.jar

do adresáře: C:\mysql-connertor-java-3.0.14-production

java –classpath c:\mysql-connector-java-3.0.14-production\mysql-connector-java-3.0.14-production-bin.jar;.DisplayAuthors

Page 54: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

54

5.2 Dotazování (Querying) v databázi books

• Dovoluje uživateli v programu zadat libovolný dotaz

• Zobrazí výsledky dotazu v JTable

Page 55: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

Osnova// // // // TableModelTableModelTableModelTableModel, , , , kterykterykteryktery dodavadodavadodavadodava ResultSetResultSetResultSetResultSet data do data do data do data do JTableJTableJTableJTable....

package paket2;package paket2;package paket2;package paket2;

import import import import java.sql.Connectionjava.sql.Connectionjava.sql.Connectionjava.sql.Connection;;;;

import import import import java.sql.Statementjava.sql.Statementjava.sql.Statementjava.sql.Statement;;;;

import import import import java.sql.DriverManagerjava.sql.DriverManagerjava.sql.DriverManagerjava.sql.DriverManager;;;;

import import import import java.sql.ResultSetjava.sql.ResultSetjava.sql.ResultSetjava.sql.ResultSet;;;;

import import import import java.sql.ResultSetMetaDatajava.sql.ResultSetMetaDatajava.sql.ResultSetMetaDatajava.sql.ResultSetMetaData;;;;

import import import import java.sql.SQLExceptionjava.sql.SQLExceptionjava.sql.SQLExceptionjava.sql.SQLException;;;;

import import import import javax.swing.table.AbstractTableModeljavax.swing.table.AbstractTableModeljavax.swing.table.AbstractTableModeljavax.swing.table.AbstractTableModel;;;;

// // // // RadkyRadkyRadkyRadky a a a a sloupcesloupcesloupcesloupce ResultSetResultSetResultSetResultSet jsoujsoujsoujsou cislovanycislovanycislovanycislovany odododod 1 a 1 a 1 a 1 a radkyradkyradkyradky a a a a

// // // // sloupcesloupcesloupcesloupce JTableJTableJTableJTable jsoujsoujsoujsou cislovanycislovanycislovanycislovany odododod 0. 0. 0. 0. PriPriPriPri zpracovanizpracovanizpracovanizpracovani radkuradkuradkuradku nebonebonebonebo

// // // // sloupcusloupcusloupcusloupcu ResultSetResultSetResultSetResultSet pro pro pro pro pouzitipouzitipouzitipouziti v v v v JTableJTableJTableJTable, , , , jejejeje nutnenutnenutnenutne

// // // // pricistpricistpricistpricist 1 k 1 k 1 k 1 k cislucislucislucislu radkuradkuradkuradku nebonebonebonebo sloupcesloupcesloupcesloupce k k k k tomutomutomutomu, , , , abyabyabyaby se s se s se s se s radkyradkyradkyradky a a a a sloupcisloupcisloupcisloupci

// // // // ResultSetResultSetResultSetResultSet spravnespravnespravnespravne manipulovalomanipulovalomanipulovalomanipulovalo ((((naprnaprnaprnapr. . . . sloupecsloupecsloupecsloupec 0 0 0 0 JTableJTableJTableJTable jejejeje

// // // // sloupecsloupecsloupecsloupec 1 1 1 1 ResultSetResultSetResultSetResultSet a a a a radekradekradekradek 0 0 0 0 JTableJTableJTableJTable jejejeje radekradekradekradek 1 1 1 1 ResultSetResultSetResultSetResultSet).).).).

public class public class public class public class ResultSetTableModelResultSetTableModelResultSetTableModelResultSetTableModel extends extends extends extends AbstractTableModelAbstractTableModelAbstractTableModelAbstractTableModel

{{{{

private Connection private Connection private Connection private Connection connectionconnectionconnectionconnection;;;;

private Statement private Statement private Statement private Statement statementstatementstatementstatement;;;;

private private private private ResultSetResultSetResultSetResultSet resultSetresultSetresultSetresultSet;;;;

private private private private ResultSetMetaDataResultSetMetaDataResultSetMetaDataResultSetMetaData metaDatametaDatametaDatametaData;;;;

private private private private intintintint numberOfRowsnumberOfRowsnumberOfRowsnumberOfRows;;;;

// // // // sledovanisledovanisledovanisledovani statusustatusustatusustatusu pripojenipripojenipripojenipripojeni databazedatabazedatabazedatabaze

private private private private booleanbooleanbooleanboolean connectedToDatabaseconnectedToDatabaseconnectedToDatabaseconnectedToDatabase = false;= false;= false;= false;

Page 56: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

Osnova// // // // konstruktorkonstruktorkonstruktorkonstruktor inicializujeinicializujeinicializujeinicializuje resultSetresultSetresultSetresultSet a a a a ziskaziskaziskaziska jehojehojehojeho meta data object;meta data object;meta data object;meta data object;

// k // k // k // k urceniurceniurceniurceni poctupoctupoctupoctu radkuradkuradkuradku

public public public public ResultSetTableModelResultSetTableModelResultSetTableModelResultSetTableModel( String driver, String ( String driver, String ( String driver, String ( String driver, String urlurlurlurl, , , ,

String username, String password, String query ) String username, String password, String query ) String username, String password, String query ) String username, String password, String query )

throws throws throws throws SQLExceptionSQLExceptionSQLExceptionSQLException, , , , ClassNotFoundExceptionClassNotFoundExceptionClassNotFoundExceptionClassNotFoundException

{ { { {

// // // // nahraninahraninahraninahrani tridytridytridytridy databazovehodatabazovehodatabazovehodatabazoveho driverudriverudriverudriveru

Class.forNameClass.forNameClass.forNameClass.forName( driver );( driver );( driver );( driver );

// // // // pripojenipripojenipripojenipripojeni k k k k databazidatabazidatabazidatabazi

connection = connection = connection = connection = DriverManager.getConnectionDriverManager.getConnectionDriverManager.getConnectionDriverManager.getConnection( ( ( ( urlurlurlurl, username, password );, username, password );, username, password );, username, password );

// // // // vytvorenivytvorenivytvorenivytvoreni Statement k Statement k Statement k Statement k dotazumdotazumdotazumdotazum v v v v databazidatabazidatabazidatabazi

statement = statement = statement = statement = connection.createStatementconnection.createStatementconnection.createStatementconnection.createStatement( ( ( (

ResultSet.TYPE_SCROLL_INSENSITIVEResultSet.TYPE_SCROLL_INSENSITIVEResultSet.TYPE_SCROLL_INSENSITIVEResultSet.TYPE_SCROLL_INSENSITIVE,,,,

ResultSet.CONCUR_READ_ONLYResultSet.CONCUR_READ_ONLYResultSet.CONCUR_READ_ONLYResultSet.CONCUR_READ_ONLY ););););

// // // // aktualizaceaktualizaceaktualizaceaktualizace statusustatusustatusustatusu pripojenipripojenipripojenipripojeni databazedatabazedatabazedatabaze

connectedToDatabaseconnectedToDatabaseconnectedToDatabaseconnectedToDatabase = true;= true;= true;= true;

// // // // nastaveninastaveninastaveninastaveni dotazudotazudotazudotazu a a a a jehojehojehojeho provedeniprovedeniprovedeniprovedeni

setQuerysetQuerysetQuerysetQuery( query );( query );( query );( query );

} } } } // end constructor // end constructor // end constructor // end constructor ResultSetTableModelResultSetTableModelResultSetTableModelResultSetTableModel

Page 57: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

Osnova// // // // ziskaniziskaniziskaniziskani tridytridytridytridy, , , , kterakterakteraktera predstavujepredstavujepredstavujepredstavuje typtyptyptyp sloupcesloupcesloupcesloupce

public Class public Class public Class public Class getColumnClassgetColumnClassgetColumnClassgetColumnClass( ( ( ( intintintint column ) throws column ) throws column ) throws column ) throws IllegalStateExceptionIllegalStateExceptionIllegalStateExceptionIllegalStateException

{{{{

// // // // zjistenizjistenizjistenizjisteni, , , , zdazdazdazda jejejeje pripojenipripojenipripojenipripojeni k DB k DB k DB k DB platneplatneplatneplatne

if ( !if ( !if ( !if ( !connectedToDatabaseconnectedToDatabaseconnectedToDatabaseconnectedToDatabase ) ) ) )

throw new throw new throw new throw new IllegalStateExceptionIllegalStateExceptionIllegalStateExceptionIllegalStateException( "Not Connected to Database" );( "Not Connected to Database" );( "Not Connected to Database" );( "Not Connected to Database" );

// // // // urceniurceniurceniurceni tridytridytridytridy sloupcesloupcesloupcesloupce

try try try try

{{{{

String String String String classNameclassNameclassNameclassName = = = = metaData.getColumnClassNamemetaData.getColumnClassNamemetaData.getColumnClassNamemetaData.getColumnClassName( column + 1 );( column + 1 );( column + 1 );( column + 1 );

// // // // vracenivracenivracenivraceni objektuobjektuobjektuobjektu tridytridytridytridy, , , , kterakterakteraktera predstavujepredstavujepredstavujepredstavuje classNameclassNameclassNameclassName

return return return return Class.forNameClass.forNameClass.forNameClass.forName( ( ( ( classNameclassNameclassNameclassName ););););

} } } } // end try// end try// end try// end try

catch ( Exception catch ( Exception catch ( Exception catch ( Exception exceptionexceptionexceptionexception ) ) ) )

{{{{

exception.printStackTraceexception.printStackTraceexception.printStackTraceexception.printStackTrace();();();();

} } } } // end catch// end catch// end catch// end catch

return return return return Object.classObject.classObject.classObject.class; ; ; ;

} } } } // end method // end method // end method // end method getColumnClassgetColumnClassgetColumnClassgetColumnClass

Page 58: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

Osnova// // // // ziskaniziskaniziskaniziskani tridytridytridytridy, , , , kterakterakteraktera predstavujepredstavujepredstavujepredstavuje typtyptyptyp sloupcesloupcesloupcesloupce

public Class public Class public Class public Class getColumnClassgetColumnClassgetColumnClassgetColumnClass( ( ( ( intintintint column ) throws column ) throws column ) throws column ) throws IllegalStateExceptionIllegalStateExceptionIllegalStateExceptionIllegalStateException

{{{{

// // // // zjistenizjistenizjistenizjisteni, , , , zdazdazdazda jejejeje pripojenipripojenipripojenipripojeni k DB k DB k DB k DB platneplatneplatneplatne

if ( !if ( !if ( !if ( !connectedToDatabaseconnectedToDatabaseconnectedToDatabaseconnectedToDatabase ) ) ) )

throw new throw new throw new throw new IllegalStateExceptionIllegalStateExceptionIllegalStateExceptionIllegalStateException( "Not Connected to Database" );( "Not Connected to Database" );( "Not Connected to Database" );( "Not Connected to Database" );

// // // // urceniurceniurceniurceni tridytridytridytridy sloupcesloupcesloupcesloupce

try try try try

{{{{

String String String String classNameclassNameclassNameclassName = = = = metaData.getColumnClassNamemetaData.getColumnClassNamemetaData.getColumnClassNamemetaData.getColumnClassName( column + 1 );( column + 1 );( column + 1 );( column + 1 );

// // // // vracenivracenivracenivraceni objektuobjektuobjektuobjektu tridytridytridytridy, , , , kterakterakteraktera predstavujepredstavujepredstavujepredstavuje classNameclassNameclassNameclassName

return return return return Class.forNameClass.forNameClass.forNameClass.forName( ( ( ( classNameclassNameclassNameclassName ););););

} } } } // end try// end try// end try// end try

catch ( Exception catch ( Exception catch ( Exception catch ( Exception exceptionexceptionexceptionexception ) ) ) )

{{{{

exception.printStackTraceexception.printStackTraceexception.printStackTraceexception.printStackTrace();();();();

} } } } // end catch// end catch// end catch// end catch

return return return return Object.classObject.classObject.classObject.class; ; ; ;

} } } } // end method // end method // end method // end method getColumnClassgetColumnClassgetColumnClassgetColumnClass

Page 59: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

Osnova// // // // ziskaniziskaniziskaniziskani jmenajmenajmenajmena konkretnihokonkretnihokonkretnihokonkretniho sloupcesloupcesloupcesloupce v v v v ResultSetResultSetResultSetResultSet

public String public String public String public String getColumnNamegetColumnNamegetColumnNamegetColumnName( ( ( ( intintintint column ) throws column ) throws column ) throws column ) throws IllegalStateExceptionIllegalStateExceptionIllegalStateExceptionIllegalStateException

{ { { {

// // // // zjistenizjistenizjistenizjisteni, , , , zdazdazdazda jejejeje DB DB DB DB dostupnadostupnadostupnadostupna

if ( !if ( !if ( !if ( !connectedToDatabaseconnectedToDatabaseconnectedToDatabaseconnectedToDatabase ) ) ) )

throw new throw new throw new throw new IllegalStateExceptionIllegalStateExceptionIllegalStateExceptionIllegalStateException( "Not Connected to Database" );( "Not Connected to Database" );( "Not Connected to Database" );( "Not Connected to Database" );

// // // // urceniurceniurceniurceni jmenajmenajmenajmena sloupcesloupcesloupcesloupce

try try try try

{{{{

return return return return metaData.getColumnNamemetaData.getColumnNamemetaData.getColumnNamemetaData.getColumnName( column + 1 ); ( column + 1 ); ( column + 1 ); ( column + 1 );

} } } } // end try// end try// end try// end try

catch ( catch ( catch ( catch ( SQLExceptionSQLExceptionSQLExceptionSQLException sqlExceptionsqlExceptionsqlExceptionsqlException ) ) ) )

{{{{

sqlException.printStackTracesqlException.printStackTracesqlException.printStackTracesqlException.printStackTrace();();();();

} } } } // end catch// end catch// end catch// end catch

return ""; return ""; return ""; return ""; // // // // pripripripri problemechproblemechproblemechproblemech vracivracivracivraci prazdnyprazdnyprazdnyprazdny retezecretezecretezecretezec mistomistomistomisto jmenajmenajmenajmena

////////sloupcesloupcesloupcesloupce

} } } } // end method // end method // end method // end method getColumnNamegetColumnNamegetColumnNamegetColumnName

Page 60: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

Osnova// // // // vracivracivracivraci pocetpocetpocetpocet radkuradkuradkuradku v v v v ResultSetResultSetResultSetResultSet

public public public public intintintint getRowCountgetRowCountgetRowCountgetRowCount() throws () throws () throws () throws IllegalStateExceptionIllegalStateExceptionIllegalStateExceptionIllegalStateException

{ { { {

// // // // zjistenizjistenizjistenizjisteni, , , , zdazdazdazda jejejeje DB DB DB DB pripojenapripojenapripojenapripojena

if ( !if ( !if ( !if ( !connectedToDatabaseconnectedToDatabaseconnectedToDatabaseconnectedToDatabase ) ) ) )

throw new throw new throw new throw new IllegalStateExceptionIllegalStateExceptionIllegalStateExceptionIllegalStateException( "Not Connected to Database" );( "Not Connected to Database" );( "Not Connected to Database" );( "Not Connected to Database" );

return return return return numberOfRowsnumberOfRowsnumberOfRowsnumberOfRows;;;;

} } } } // end method // end method // end method // end method getRowCountgetRowCountgetRowCountgetRowCount

// // // // ziskaniziskaniziskaniziskani hodnotyhodnotyhodnotyhodnoty z z z z konkretnihokonkretnihokonkretnihokonkretniho radkuradkuradkuradku a a a a sloupcesloupcesloupcesloupce

public Object public Object public Object public Object getValueAtgetValueAtgetValueAtgetValueAt( ( ( ( intintintint row, row, row, row, intintintint column ) column ) column ) column )

throws throws throws throws IllegalStateExceptionIllegalStateExceptionIllegalStateExceptionIllegalStateException

{{{{

// // // // zjistenizjistenizjistenizjisteni, , , , zdazdazdazda jejejeje DB DB DB DB dostupnadostupnadostupnadostupna

if ( !if ( !if ( !if ( !connectedToDatabaseconnectedToDatabaseconnectedToDatabaseconnectedToDatabase ) ) ) )

throw new throw new throw new throw new IllegalStateExceptionIllegalStateExceptionIllegalStateExceptionIllegalStateException( "Not Connected to Database" );( "Not Connected to Database" );( "Not Connected to Database" );( "Not Connected to Database" );

// // // // ziskaniziskaniziskaniziskani hodnotyhodnotyhodnotyhodnoty v v v v konkretnimkonkretnimkonkretnimkonkretnim radkuradkuradkuradku a a a a sloupcisloupcisloupcisloupci v v v v ResultSetResultSetResultSetResultSet

try try try try

{{{{

resultSet.absoluteresultSet.absoluteresultSet.absoluteresultSet.absolute( row + 1 );( row + 1 );( row + 1 );( row + 1 );

return return return return resultSet.getObjectresultSet.getObjectresultSet.getObjectresultSet.getObject( column + 1 );( column + 1 );( column + 1 );( column + 1 );

} } } } // end try// end try// end try// end try

Page 61: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

Osnovacatch ( catch ( catch ( catch ( SQLExceptionSQLExceptionSQLExceptionSQLException sqlExceptionsqlExceptionsqlExceptionsqlException ) ) ) )

{{{{

sqlException.printStackTracesqlException.printStackTracesqlException.printStackTracesqlException.printStackTrace();();();();

} } } } // end catch// end catch// end catch// end catch

return ""; // return ""; // return ""; // return ""; // pripripripri problemechproblemechproblemechproblemech vracivracivracivraci prazdnyprazdnyprazdnyprazdny retezecretezecretezecretezec

} } } } // end method // end method // end method // end method getValueAtgetValueAtgetValueAtgetValueAt

// // // // nastaveninastaveninastaveninastaveni novehonovehonovehonoveho retezceretezceretezceretezce databazovehodatabazovehodatabazovehodatabazoveho dotazudotazudotazudotazu

public void public void public void public void setQuerysetQuerysetQuerysetQuery( String query ) ( String query ) ( String query ) ( String query )

throws throws throws throws SQLExceptionSQLExceptionSQLExceptionSQLException, , , , IllegalStateExceptionIllegalStateExceptionIllegalStateExceptionIllegalStateException

{{{{

// // // // zjistenizjistenizjistenizjisteni, , , , zdazdazdazda jejejeje DB DB DB DB dostupnadostupnadostupnadostupna

if ( !if ( !if ( !if ( !connectedToDatabaseconnectedToDatabaseconnectedToDatabaseconnectedToDatabase ) ) ) )

throw new throw new throw new throw new IllegalStateExceptionIllegalStateExceptionIllegalStateExceptionIllegalStateException( "Not Connected to Database" );( "Not Connected to Database" );( "Not Connected to Database" );( "Not Connected to Database" );

// // // // specifikacespecifikacespecifikacespecifikace dotazudotazudotazudotazu a a a a jehojehojehojeho vykonanivykonanivykonanivykonani

resultSetresultSetresultSetresultSet = = = = statement.executeQuerystatement.executeQuerystatement.executeQuerystatement.executeQuery( query );( query );( query );( query );

// // // // ziskaniziskaniziskaniziskani meta meta meta meta datdatdatdat z z z z ResultSetResultSetResultSetResultSet

metaDatametaDatametaDatametaData = = = = resultSet.getMetaDataresultSet.getMetaDataresultSet.getMetaDataresultSet.getMetaData();();();();

// // // // urceniurceniurceniurceni poctupoctupoctupoctu radkuradkuradkuradku v v v v ResultSetResultSetResultSetResultSet

resultSet.lastresultSet.lastresultSet.lastresultSet.last(); (); (); (); // // // // presunpresunpresunpresun nananana posledniposledniposledniposledni radekradekradekradek

numberOfRowsnumberOfRowsnumberOfRowsnumberOfRows = = = = resultSet.getRowresultSet.getRowresultSet.getRowresultSet.getRow(); (); (); (); // // // // ziskaniziskaniziskaniziskani cislacislacislacisla radkuradkuradkuradku

Page 62: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

Osnova// // // // uvedomeniuvedomeniuvedomeniuvedomeni JTableJTableJTableJTable, , , , zezezeze se model se model se model se model zmenilzmenilzmenilzmenil

fireTableStructureChangedfireTableStructureChangedfireTableStructureChangedfireTableStructureChanged();();();();

} } } } // end method // end method // end method // end method setQuerysetQuerysetQuerysetQuery

// // // // uzavreniuzavreniuzavreniuzavreni Statement a ConnectionStatement a ConnectionStatement a ConnectionStatement a Connection

public void public void public void public void disconnectFromDatabasedisconnectFromDatabasedisconnectFromDatabasedisconnectFromDatabase() () () ()

{ { { {

if ( !if ( !if ( !if ( !connectedToDatabaseconnectedToDatabaseconnectedToDatabaseconnectedToDatabase ) ) ) )

return;return;return;return;

try try try try

{ { { {

statement.closestatement.closestatement.closestatement.close(); (); (); ();

connection.closeconnection.closeconnection.closeconnection.close(); (); (); ();

} } } } // end try// end try// end try// end try

catch ( catch ( catch ( catch ( SQLExceptionSQLExceptionSQLExceptionSQLException sqlExceptionsqlExceptionsqlExceptionsqlException ) ) ) )

{ { { {

sqlException.printStackTracesqlException.printStackTracesqlException.printStackTracesqlException.printStackTrace(); (); (); ();

} } } } // end catch// end catch// end catch// end catch

finally // update database connection statusfinally // update database connection statusfinally // update database connection statusfinally // update database connection status

{ { { {

connectedToDatabaseconnectedToDatabaseconnectedToDatabaseconnectedToDatabase = false; = false; = false; = false;

} } } } // end finally// end finally// end finally// end finally

} } } } // end method // end method // end method // end method disconnectFromDatabasedisconnectFromDatabasedisconnectFromDatabasedisconnectFromDatabase

} } } } // end class // end class // end class // end class ResultSetTableModelResultSetTableModelResultSetTableModelResultSetTableModel

Page 63: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

63

Třída ResultSet - pokra čování

• jednosměrná nebo obousměrná sada záznamůforward-only-recordsetscrollable recordset

• vlastnosti třídy uvedeny v tabulkách

Page 64: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

64

5.2 Dotazování v databázi books

Statický typ konstanty ResultSet

Popis

TYPE_FORWARD_ONLY Specifikuje, že kurzor ResultSet se může posunout

pouze směrem dopředu (např. Od mprvního řádku k poslednímu řádku v ResultSet).

TYPE_SCROLL_INSENSITIVE Specifikuje, že kurzor ResultSet může rolovat v

libovolném směru a že změny vytvořené v ResultSet během zpracování ResultSet nejsou reflektovány v ResultSet do doby než se program opět dotáže databáze.

TYPE_SCROLL_SENSITIVE Specifikuje, že kurzor ResultSet může

rolovat v libovolném směru a že změny udělané v ResultSet během zpracování ResultSet jsou okamžitě reflektovány v ResultSet.

Obr. 28 Konstanty ResultSetResultSetResultSetResultSet pro specifikaci typu ResultSet.

Page 65: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

65

5.2 Dotazování v databázi books

StatickStatickStatickStatické concurrency constant ResultSetResultSetResultSetResultSet

Popis

CONCUR_READ_ONLY Specifikuje, že ResultSet nemůže být aktualizován (např. Změny v obsahu ResultSet nemohou být reflektovány v databázi s ResultSet update methodami).

CONCUR_UPDATABLE Specifikuje, že ResultSet může být aktualizován (např. Změny v obsahu ResultSet mohou být reflektovány v databázi s ResultSet update methodami).

Obr. 29 Konstanty ResultSetResultSetResultSetResultSet pro specifikaci vlastností result.

Page 66: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

Osnova// // // // zobrazizobrazizobrazizobrazi obsahobsahobsahobsah tabulkytabulkytabulkytabulky Authors v Authors v Authors v Authors v databazidatabazidatabazidatabazi BooksBooksBooksBooks

package paket2;package paket2;package paket2;package paket2;

import import import import java.awt.BorderLayoutjava.awt.BorderLayoutjava.awt.BorderLayoutjava.awt.BorderLayout;;;;

import import import import java.awt.event.ActionListenerjava.awt.event.ActionListenerjava.awt.event.ActionListenerjava.awt.event.ActionListener;;;;

import import import import java.awt.event.ActionEventjava.awt.event.ActionEventjava.awt.event.ActionEventjava.awt.event.ActionEvent;;;;

import import import import java.awt.event.WindowAdapterjava.awt.event.WindowAdapterjava.awt.event.WindowAdapterjava.awt.event.WindowAdapter;;;;

import import import import java.awt.event.WindowEventjava.awt.event.WindowEventjava.awt.event.WindowEventjava.awt.event.WindowEvent;;;;

import import import import java.sql.SQLExceptionjava.sql.SQLExceptionjava.sql.SQLExceptionjava.sql.SQLException;;;;

import import import import javax.swing.JFramejavax.swing.JFramejavax.swing.JFramejavax.swing.JFrame;;;;

import import import import javax.swing.JTextAreajavax.swing.JTextAreajavax.swing.JTextAreajavax.swing.JTextArea;;;;

import import import import javax.swing.JScrollPanejavax.swing.JScrollPanejavax.swing.JScrollPanejavax.swing.JScrollPane;;;;

import import import import javax.swing.ScrollPaneConstantsjavax.swing.ScrollPaneConstantsjavax.swing.ScrollPaneConstantsjavax.swing.ScrollPaneConstants;;;;

import import import import javax.swing.JTablejavax.swing.JTablejavax.swing.JTablejavax.swing.JTable;;;;

import import import import javax.swing.JOptionPanejavax.swing.JOptionPanejavax.swing.JOptionPanejavax.swing.JOptionPane;;;;

import import import import javax.swing.JButtonjavax.swing.JButtonjavax.swing.JButtonjavax.swing.JButton;;;;

import import import import javax.swing.Boxjavax.swing.Boxjavax.swing.Boxjavax.swing.Box;;;;

public class public class public class public class DisplayQueryResultsDisplayQueryResultsDisplayQueryResultsDisplayQueryResults extends extends extends extends JFrameJFrameJFrameJFrame

{{{{

// JDBC driver, database URL, username and password// JDBC driver, database URL, username and password// JDBC driver, database URL, username and password// JDBC driver, database URL, username and password

static final String JDBC_DRIVER = "static final String JDBC_DRIVER = "static final String JDBC_DRIVER = "static final String JDBC_DRIVER = "com.mysql.jdbc.Drivercom.mysql.jdbc.Drivercom.mysql.jdbc.Drivercom.mysql.jdbc.Driver";";";";

static final String DATABASE_URL = "static final String DATABASE_URL = "static final String DATABASE_URL = "static final String DATABASE_URL = "jdbc:mysql://localhost/booksjdbc:mysql://localhost/booksjdbc:mysql://localhost/booksjdbc:mysql://localhost/books";";";";

static final String USERNAME= "jhtp6";static final String USERNAME= "jhtp6";static final String USERNAME= "jhtp6";static final String USERNAME= "jhtp6";

static final String PASSWORD= "jhtp6";static final String PASSWORD= "jhtp6";static final String PASSWORD= "jhtp6";static final String PASSWORD= "jhtp6";

Page 67: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

Osnova// // // // standardnistandardnistandardnistandardni dotazdotazdotazdotaz ---- ziskaziskaziskaziska vsechnavsechnavsechnavsechna data z data z data z data z tabulkytabulkytabulkytabulky authorsauthorsauthorsauthors

static final String DEFAULT_QUERY = "SELECT * FROM authors";static final String DEFAULT_QUERY = "SELECT * FROM authors";static final String DEFAULT_QUERY = "SELECT * FROM authors";static final String DEFAULT_QUERY = "SELECT * FROM authors";

private private private private ResultSetTableModelResultSetTableModelResultSetTableModelResultSetTableModel tableModeltableModeltableModeltableModel;;;;

private private private private JTextAreaJTextAreaJTextAreaJTextArea queryAreaqueryAreaqueryAreaqueryArea;;;;

// // // // vytvorenivytvorenivytvorenivytvoreni ResultSetTableModelResultSetTableModelResultSetTableModelResultSetTableModel a GUIa GUIa GUIa GUI

public public public public DisplayQueryResultsDisplayQueryResultsDisplayQueryResultsDisplayQueryResults() () () ()

{ { { {

super( "Displaying Query Results" );super( "Displaying Query Results" );super( "Displaying Query Results" );super( "Displaying Query Results" );

// // // // vytvorenivytvorenivytvorenivytvoreni ResultSetTableModelResultSetTableModelResultSetTableModelResultSetTableModel a a a a zobrazizobrazizobrazizobrazi tabulkutabulkutabulkutabulku databazedatabazedatabazedatabaze

try try try try

{{{{

// // // // vytvorenivytvorenivytvorenivytvoreni TableModelTableModelTableModelTableModel pro pro pro pro vysledkyvysledkyvysledkyvysledky dotazudotazudotazudotazu SELECT * FROM authorsSELECT * FROM authorsSELECT * FROM authorsSELECT * FROM authors

tableModeltableModeltableModeltableModel = new = new = new = new ResultSetTableModelResultSetTableModelResultSetTableModelResultSetTableModel( JDBC_DRIVER, DATABASE_URL, ( JDBC_DRIVER, DATABASE_URL, ( JDBC_DRIVER, DATABASE_URL, ( JDBC_DRIVER, DATABASE_URL,

USERNAME, PASSWORD, DEFAULT_QUERY );USERNAME, PASSWORD, DEFAULT_QUERY );USERNAME, PASSWORD, DEFAULT_QUERY );USERNAME, PASSWORD, DEFAULT_QUERY );

// // // // nastaveninastaveninastaveninastaveni JTextAreaJTextAreaJTextAreaJTextArea veveveve kterekterekterektere uzivateluzivateluzivateluzivatel zapisezapisezapisezapise dotazydotazydotazydotazy

queryAreaqueryAreaqueryAreaqueryArea = new = new = new = new JTextAreaJTextAreaJTextAreaJTextArea( DEFAULT_QUERY, 3, 100 );( DEFAULT_QUERY, 3, 100 );( DEFAULT_QUERY, 3, 100 );( DEFAULT_QUERY, 3, 100 );

queryArea.setWrapStyleWordqueryArea.setWrapStyleWordqueryArea.setWrapStyleWordqueryArea.setWrapStyleWord( true );( true );( true );( true );

queryArea.setLineWrapqueryArea.setLineWrapqueryArea.setLineWrapqueryArea.setLineWrap( true );( true );( true );( true );

Page 68: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

OsnovaJScrollPaneJScrollPaneJScrollPaneJScrollPane scrollPanescrollPanescrollPanescrollPane = new = new = new = new JScrollPaneJScrollPaneJScrollPaneJScrollPane( ( ( ( queryAreaqueryAreaqueryAreaqueryArea,,,,

ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDEDScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDEDScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDEDScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, , , ,

ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVERScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVERScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVERScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER ););););

// // // // nastaveninastaveninastaveninastaveni JButtonJButtonJButtonJButton pro pro pro pro odeslaniodeslaniodeslaniodeslani (submitting) (submitting) (submitting) (submitting) dotazudotazudotazudotazu

JButtonJButtonJButtonJButton submitButtonsubmitButtonsubmitButtonsubmitButton = new = new = new = new JButtonJButtonJButtonJButton( "Submit Query" );( "Submit Query" );( "Submit Query" );( "Submit Query" );

// // // // vytvorenivytvorenivytvorenivytvoreni Box k Box k Box k Box k umisteniumisteniumisteniumisteni queryAreaqueryAreaqueryAreaqueryArea a a a a

// // // // submitButtonsubmitButtonsubmitButtonsubmitButton do GUIdo GUIdo GUIdo GUI

Box Box Box Box boxboxboxbox = = = = Box.createHorizontalBoxBox.createHorizontalBoxBox.createHorizontalBoxBox.createHorizontalBox();();();();

box.addbox.addbox.addbox.add( ( ( ( scrollPanescrollPanescrollPanescrollPane ););););

box.addbox.addbox.addbox.add( ( ( ( submitButtonsubmitButtonsubmitButtonsubmitButton ););););

// // // // vytvorenivytvorenivytvorenivytvoreni JTableJTableJTableJTable pro pro pro pro tableModeltableModeltableModeltableModel

JTableJTableJTableJTable resultTableresultTableresultTableresultTable = new = new = new = new JTableJTableJTableJTable( ( ( ( tableModeltableModeltableModeltableModel ););););

// // // // umisteniumisteniumisteniumisteni komponentkomponentkomponentkomponent GUI co GUI co GUI co GUI co obsahuobsahuobsahuobsahu panepanepanepane

add( box, add( box, add( box, add( box, BorderLayout.NORTHBorderLayout.NORTHBorderLayout.NORTHBorderLayout.NORTH ););););

add( new add( new add( new add( new JScrollPaneJScrollPaneJScrollPaneJScrollPane( ( ( ( resultTableresultTableresultTableresultTable ), ), ), ), BorderLayout.CENTERBorderLayout.CENTERBorderLayout.CENTERBorderLayout.CENTER ););););

Page 69: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

Osnova// // // // vytvorenivytvorenivytvorenivytvoreni event listener pro event listener pro event listener pro event listener pro submitButtonsubmitButtonsubmitButtonsubmitButton

submitButton.addActionListenersubmitButton.addActionListenersubmitButton.addActionListenersubmitButton.addActionListener( ( ( (

new new new new ActionListenerActionListenerActionListenerActionListener() () () ()

{{{{

// // // // predanipredanipredanipredani dotazudotazudotazudotazu modelumodelumodelumodelu tabletabletabletable

public void public void public void public void actionPerformedactionPerformedactionPerformedactionPerformed( ( ( ( ActionEventActionEventActionEventActionEvent event )event )event )event )

{{{{

// // // // vykonanivykonanivykonanivykonani novehonovehonovehonoveho dotazudotazudotazudotazu

try try try try

{{{{

tableModel.setQuerytableModel.setQuerytableModel.setQuerytableModel.setQuery( ( ( ( queryArea.getTextqueryArea.getTextqueryArea.getTextqueryArea.getText() );() );() );() );

} } } } // end try// end try// end try// end try

catch ( catch ( catch ( catch ( SQLExceptionSQLExceptionSQLExceptionSQLException sqlExceptionsqlExceptionsqlExceptionsqlException ) ) ) )

{{{{

JOptionPane.showMessageDialogJOptionPane.showMessageDialogJOptionPane.showMessageDialogJOptionPane.showMessageDialog( null, ( null, ( null, ( null,

sqlException.getMessagesqlException.getMessagesqlException.getMessagesqlException.getMessage(), "Database error", (), "Database error", (), "Database error", (), "Database error",

JOptionPane.ERROR_MESSAGEJOptionPane.ERROR_MESSAGEJOptionPane.ERROR_MESSAGEJOptionPane.ERROR_MESSAGE ););););

// // // // blokblokblokblok try pro try pro try pro try pro osetreniosetreniosetreniosetreni neplatnehoneplatnehoneplatnehoneplatneho uzivatelskehouzivatelskehouzivatelskehouzivatelskeho dotazudotazudotazudotazu

// // // // pomocipomocipomocipomoci vykonanivykonanivykonanivykonani standardnihostandardnihostandardnihostandardniho dotazudotazudotazudotazu

try try try try

{{{{

tableModel.setQuerytableModel.setQuerytableModel.setQuerytableModel.setQuery( DEFAULT_QUERY );( DEFAULT_QUERY );( DEFAULT_QUERY );( DEFAULT_QUERY );

queryArea.setTextqueryArea.setTextqueryArea.setTextqueryArea.setText( DEFAULT_QUERY );( DEFAULT_QUERY );( DEFAULT_QUERY );( DEFAULT_QUERY );

} } } } // end try// end try// end try// end try

Page 70: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

Osnovacatch ( catch ( catch ( catch ( SQLExceptionSQLExceptionSQLExceptionSQLException sqlException2 ) sqlException2 ) sqlException2 ) sqlException2 )

{{{{

JOptionPane.showMessageDialogJOptionPane.showMessageDialogJOptionPane.showMessageDialogJOptionPane.showMessageDialog( null, ( null, ( null, ( null,

sqlException2.getMessage(), "DatabasesqlException2.getMessage(), "DatabasesqlException2.getMessage(), "DatabasesqlException2.getMessage(), "Database error", error", error", error",

JOptionPane.ERROR_MESSAGEJOptionPane.ERROR_MESSAGEJOptionPane.ERROR_MESSAGEJOptionPane.ERROR_MESSAGE ););););

// // // // zjistenizjistenizjistenizjisteni, , , , zdazdazdazda jejejeje pripojenipripojenipripojenipripojeni k DB k DB k DB k DB uzavreneuzavreneuzavreneuzavrene

tableModel.disconnectFromDatabasetableModel.disconnectFromDatabasetableModel.disconnectFromDatabasetableModel.disconnectFromDatabase();();();();

System.exitSystem.exitSystem.exitSystem.exit( 1 ); // ( 1 ); // ( 1 ); // ( 1 ); // ukonceniukonceniukonceniukonceni aplikaceaplikaceaplikaceaplikace

} } } } // end inner catch// end inner catch// end inner catch// end inner catch

} } } } // end outer catch// end outer catch// end outer catch// end outer catch

} } } } // end // end // end // end actionPerformedactionPerformedactionPerformedactionPerformed

} } } } // end // end // end // end ActionListenerActionListenerActionListenerActionListener inner classinner classinner classinner class

); ); ); ); // end call to // end call to // end call to // end call to addActionListeneraddActionListeneraddActionListeneraddActionListener

setSizesetSizesetSizesetSize( 500, 250 ); // ( 500, 250 ); // ( 500, 250 ); // ( 500, 250 ); // nastaveninastaveninastaveninastaveni velikostivelikostivelikostivelikosti oknaoknaoknaokna

setVisiblesetVisiblesetVisiblesetVisible( true ); // ( true ); // ( true ); // ( true ); // zobrazenizobrazenizobrazenizobrazeni oknaoknaoknaokna

} } } } // end try// end try// end try// end try

catch ( catch ( catch ( catch ( ClassNotFoundExceptionClassNotFoundExceptionClassNotFoundExceptionClassNotFoundException classNotFoundclassNotFoundclassNotFoundclassNotFound ) ) ) )

{{{{

JOptionPane.showMessageDialogJOptionPane.showMessageDialogJOptionPane.showMessageDialogJOptionPane.showMessageDialog( null, ( null, ( null, ( null,

""""MySQLMySQLMySQLMySQL driver not found", "Driver not found",driver not found", "Driver not found",driver not found", "Driver not found",driver not found", "Driver not found",

JOptionPane.ERROR_MESSAGEJOptionPane.ERROR_MESSAGEJOptionPane.ERROR_MESSAGEJOptionPane.ERROR_MESSAGE ););););

System.exitSystem.exitSystem.exitSystem.exit( 1 ); // ( 1 ); // ( 1 ); // ( 1 ); // ukonceniukonceniukonceniukonceni aplikaceaplikaceaplikaceaplikace

} } } } // end catch// end catch// end catch// end catch

Page 71: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

Osnovacatch ( catch ( catch ( catch ( SQLExceptionSQLExceptionSQLExceptionSQLException sqlExceptionsqlExceptionsqlExceptionsqlException ) ) ) )

{{{{

JOptionPane.showMessageDialogJOptionPane.showMessageDialogJOptionPane.showMessageDialogJOptionPane.showMessageDialog( null, ( null, ( null, ( null, sqlException.getMessagesqlException.getMessagesqlException.getMessagesqlException.getMessage(), (), (), (),

"Database error", "Database error", "Database error", "Database error", JOptionPane.ERROR_MESSAGEJOptionPane.ERROR_MESSAGEJOptionPane.ERROR_MESSAGEJOptionPane.ERROR_MESSAGE ););););

// // // // zjistenizjistenizjistenizjisteni, , , , zdazdazdazda jejejeje pripojenipripojenipripojenipripojeni k DB k DB k DB k DB zavrenozavrenozavrenozavreno

tableModel.disconnectFromDatabasetableModel.disconnectFromDatabasetableModel.disconnectFromDatabasetableModel.disconnectFromDatabase();();();();

System.exitSystem.exitSystem.exitSystem.exit( 1 ); // ( 1 ); // ( 1 ); // ( 1 ); // ukonceniukonceniukonceniukonceni aplikaceaplikaceaplikaceaplikace

} } } } // end catch// end catch// end catch// end catch

// // // // uvolneniuvolneniuvolneniuvolneni oknaoknaoknaokna, , , , kdyzkdyzkdyzkdyz uzivateluzivateluzivateluzivatel ukonciukonciukonciukonci aplikaciaplikaciaplikaciaplikaci ((((totototototototo zastinizastinizastinizastini

//////// (overrides)(overrides)(overrides)(overrides) standardnistandardnistandardnistandardni HIDE_ON_CLOSE)HIDE_ON_CLOSE)HIDE_ON_CLOSE)HIDE_ON_CLOSE)

setDefaultCloseOperationsetDefaultCloseOperationsetDefaultCloseOperationsetDefaultCloseOperation( DISPOSE_ON_CLOSE );( DISPOSE_ON_CLOSE );( DISPOSE_ON_CLOSE );( DISPOSE_ON_CLOSE );

Page 72: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

Osnova// // // // zjistenizjistenizjistenizjisteni, , , , zdazdazdazda jejejeje uzavrenouzavrenouzavrenouzavreno pripojenipripojenipripojenipripojeni k DB, k DB, k DB, k DB, kdyzkdyzkdyzkdyz uzivateluzivateluzivateluzivatel ukonciukonciukonciukonci aplikaciaplikaciaplikaciaplikaci

addWindowListeneraddWindowListeneraddWindowListeneraddWindowListener((((

new new new new WindowAdapterWindowAdapterWindowAdapterWindowAdapter() () () ()

{{{{

// // // // odpojeniodpojeniodpojeniodpojeni odododod databazedatabazedatabazedatabaze a a a a ukonceniukonceniukonceniukonceni, , , , kdyzkdyzkdyzkdyz jejejeje uzavrenouzavrenouzavrenouzavreno oknooknooknookno

public void public void public void public void windowClosedwindowClosedwindowClosedwindowClosed( ( ( ( WindowEventWindowEventWindowEventWindowEvent event )event )event )event )

{{{{

tableModel.disconnectFromDatabasetableModel.disconnectFromDatabasetableModel.disconnectFromDatabasetableModel.disconnectFromDatabase();();();();

System.exitSystem.exitSystem.exitSystem.exit( 0 );( 0 );( 0 );( 0 );

} } } } // end method // end method // end method // end method windowClosedwindowClosedwindowClosedwindowClosed

} } } } // end // end // end // end WindowAdapterWindowAdapterWindowAdapterWindowAdapter inner classinner classinner classinner class

); ); ); ); // end call to // end call to // end call to // end call to addWindowListeneraddWindowListeneraddWindowListeneraddWindowListener

} } } } // end // end // end // end DisplayQueryResultsDisplayQueryResultsDisplayQueryResultsDisplayQueryResults constructorconstructorconstructorconstructor

// // // // spustenispustenispustenispusteni aplikaceaplikaceaplikaceaplikace

public static void main( String public static void main( String public static void main( String public static void main( String argsargsargsargs[] ) [] ) [] ) [] )

{{{{

new new new new DisplayQueryResultsDisplayQueryResultsDisplayQueryResultsDisplayQueryResults(); (); (); ();

} } } } // end main// end main// end main// end main

} } } } // end class // end class // end class // end class DisplayQueryResultsDisplayQueryResultsDisplayQueryResultsDisplayQueryResults

Page 73: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

Osnova

Výstup programus využitím GUI

Page 74: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

74

6 Uložené procedury

• Uložené procedury (Stored procedures)– Uloží příkazy SQL v databázi

– Vyvolání SQL příkazů pomocí programu, který zpřístupní databázi

• RozhraníCallableStatement

– Obdrží argumenty

– Výstup parametry

Page 75: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

75

Internet a zdroje na webu

• Sun Microsystems JDBC home page– Java.sun.com/products/jdbc

• SQL materials– www.sql.org

• Cloudscape database home page– www.cloudscape.com

Page 76: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

76

7 Objektov ě relační mapování

• Význam objektově relačního mapování (ORM)

• Dědičnost

• Strukturovaná data

• Vztahy mezi objekty

• Nástroje pro ORM– JDO (Java Data Object)

– Hibernate (databáze pro J2EE)

Page 77: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

77

Význam ORM

• „Indepance mismatch“ – nesoulad mezi objektovými technologiemi a relačním uložením dat

• Vrstva ORM odděluje logický a fyzický datový model

• Mapování objektového modelu na fyzickédatabázové schéma– manuální

– automatizované

– smíšené

• Mapování má velký vliv na efektivitu aplikací

Page 78: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

78

Dědičnost

• Sdílení společné struktury a chování

• Možnost opakovaného využitíčásti implementace společných částí

• Možnosti generického přístupu k částem hierarchie objektů– Např. provedení akce nad všemi osobami

• Abstraktní / konkrétní třídy

Page 79: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

79

Příklad hierarchie t říd

Page 80: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

80

Mapování d ědičnosti

• Horizontální mapování– Tabulka pro každou konkrétní třídu

– Obsahuje atributy všech bázových tříd

• Vertikální mapování– Tabulka pro každou konkrétní i abstraktní třídu

– Získání informací o objektu vyžaduje přístup do více tabulek

• Mapování pomocí unie– Společná tabulka pro více tříd

– Neefektivní uložení dat

Page 81: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

81

Vyber všechny hodnoty a (např. login a jméno všech osob)

(SELECT a FROM B) UNION (SELECT a FROM D) UNION (SELECT a FROM E)

Vyber konkrétní hodnotu typu D

SELECT * FROM D WHERE id=100;

Vytvoř nový objekt typu B

INSERT INTO B(id, a, b) VALUES(100,’a’,’b’);

Horizontální mapování

id a b

id

id

a

a

C

C

d

e

B

D

E

Page 82: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

82

Vertikální mapování

Vyber všechny hodnoty a (např. login a jméno všech osob)

SELECT * FROM A;

Vyber všechny hodnoty typu E

SELECT * FROM (A JOIN C JOIN E) WHERE A.id=100;

Vytvoř nový objekt typu B

INSERT INTO A(id,a) VALUES(100,’a’);

INSERT INTO B(id,b) VALUES(100,’b’);

id a id c id e . . . . . .

CA E

Page 83: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

83

Mapování pomocí unie

Vytvoř nový objekt typu B

INSERT INTO T(id, type, a, b) VALUES(100, ‘B’, ‘a’, ‘b’);

Vyber všechny hodnoty typu E

SELECT id,a,c,e FROM T WHERE type=‘E’;

Vyber konkrétní hodnotu typu E

SELECT a,c,e FROM T WHERE id=100;

Vyber všechny hodnoty a (např. login a jméno všech osob)

SELECT a FROM T

id type a b c d e

T

Page 84: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

84

Mapování pomocí unie

Vytvoř nový objekt typu B

INSERT INTO T1(id, type, a, b)VALUES(100,’B’,’a’,’b ’);

Vyber všechny hodnoty typu E

SELECT id, a, c, e FROM T2 WHERE type=‘E’;

Vyber konkrétní hodnotu typu E

SELECT a, c, e FROM T2 WHERE id= 100;

Vyber všechny hodnoty a (např. login a jméno všech osob)

(SELECT id, a FROM T1) UNION (SELECT id, a FROM T2)

id type c d ea

T2

id type ba

T1

Page 85: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

85

Dědičnost - hodnocení

• Horizontální mapování– Složité dotazy nad abstraktními třídami (union)

• Vertikální mapování– Složitější výběr konkrétního objektu (union)

– Příliš mnoho tabulek

– Flexibilita – vhodné pro návaznost na existující data

• Mapování pomocí unie– Rozumné množství tabulek

– Nutnost zavedení informace o typu

– Větší prostorové nároky

Page 86: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

86

Strukturovaná data

• Zanořený objekt (např. adresa osoby)

• Kolekce (např. kontakty osoby)

Page 87: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

87

Zanořené objekty

• Vložení atributů do vnějšího objektu

• Osamostatnění zanořeného objektu

id ulice psč obec

adresa

id id_adr id ulice psč obec

Page 88: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

88

Vztahy

• 1:1– přímá reference na objekt

– cizí klíč = primární klíč druhého objektu

– může být obousměrný vztah

• 1:N– reference na straně N

– vazební tabulka není nutná

• M:N– vazební tabulka – cizí klíče do obou svázaných tabulek

Page 89: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

89

Vztah 1:1

Vyber hodnotu A příslušnou konkrétní hodnotě B

SELECT A.* FROM A,B WHERE A.b=B.id AND B.id=100

Vyber hodnotu A příslušnou konkrétní hodnotě B

SELECT B.* FROM A,B WHERE A.b=B.id AND A.id=100

id b id

b

a

A B

Page 90: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

90

Vztah 1:N

Vyber všechny hodnoty B příslušné konkrétní hodnotě A

SELECT B.* FROM A,B WHERE B.a=A.id AND A.id=100

id id a

A B

A

a

a

a

B

Page 91: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

91

Vztah M:N

Vyber všechny hodnoty B příslušné konkrétní hodnotě A

SELECT B.* FROM A,AB,B WHERE AB.a=A.id AND AB.b=B.id AND A.id=100

id a idb

A AB B

A B

Page 92: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

92

Použití nástroj ů pro ORM

1. Návrh objektového modelu• např. UML

2. Implementace modelu• např. Java

3. Doplnění podpůrných metod• Perzistence – vytvoření, uložení, načtení, zrušení

objektu

• Transakce

• Referenční integrita

Page 93: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

93

Přístupy k automatizaci ORM

• Modifikace na úrovni zdrojového textu– Dědičnost – rozšíření o metody zajišťující perzistenci

– J2EE CMP (Container Managed Persistence)

• Modofikace vygenerovaných tříd– JDO (Java Data Objects) – Sun JSR 12

• Mapování za běhu pomocí reflexe– Hibernate

Page 94: Java Database Connectivity with - Ostravská univerzitahunka/vyuka/javaOOP/obop2/jvcv05/JDBC.pdf · Java Database Connectivity with 1 JDBC Obsah 1 Úvod 2 Rela ční-databázový

94

Další informace

• http://java.sun.com/products/jdo/index.jsp

• http://www.hibernate.org