27
1 Baze podataka II Rad sa relacionim bazama podataka u programskom jeziku Java

Baze podataka ii_prvi_cas_prakticnih_vjezbi

Embed Size (px)

Citation preview

Page 1: Baze podataka ii_prvi_cas_prakticnih_vjezbi

1

Baze podataka II

Rad sa relacionim bazama podataka u programskom jeziku

Java

Page 2: Baze podataka ii_prvi_cas_prakticnih_vjezbi

2

Uvod

Page 3: Baze podataka ii_prvi_cas_prakticnih_vjezbi

3

Uvod

JDBC (Java Database Connectivity) je standardni Javin interfejs za komunikaciju sa relacionim bazama podataka

Definiše skup klasa i interfejsa koji se koriste za pristup bazama podataka putem jezika SQL

Page 4: Baze podataka ii_prvi_cas_prakticnih_vjezbi

4

Uvod

Za komunikaciju sa serverima za baze podataka koristi se TCP/IP familija protokola

Za pristup konkretnoj bazi podataka putem JDBC-a potrebna je odgovarajuća biblioteka (obično zapakovana u JAR fajl) – to je JDBC drajver

Page 5: Baze podataka ii_prvi_cas_prakticnih_vjezbi

5

Uvod Za Oracle 8i bazu podataka postoji Oracle-ov

JDBC drajver – classes12.jar On predstavlja implementaciju JDBC 2.0

interfejsa za pristup bazi pomoću Java SDK-a verzije 1.2 ili kasnije

Prednost ovakvog pristupa – za pristup drugoj bazi podataka pomoću njenog JDBC drajvera kod se ne bi menjao, osim u slučaju upotrebe nestandardnih SQL naredbi

Page 6: Baze podataka ii_prvi_cas_prakticnih_vjezbi

6

Uvod Sve JDBC klase i interfejsi su definisani u

standardnom paketu java.sql Za upotrebu JDBC drajvera (ili više njih) je

dovoljno da on (oni) budu uključeni u CLASSPATH

Uobičajeno je da proizvođač RDBMS-a nudi JDBC drajver za svoj sistem

Tri bitne verzije JDBC interfejsa: 1.22, 2.0, 3.0

Page 7: Baze podataka ii_prvi_cas_prakticnih_vjezbi

7

Uspostavljanje veze sa bazom podataka

Page 8: Baze podataka ii_prvi_cas_prakticnih_vjezbi

8

Učitavanje Oracle drajvera

Da bi se uspostavila veza sa nekom bazom podataka putem JDBC-a, neophodno je: učitavanje drajvera otvaranje konekcije sa bazom podataka

Page 9: Baze podataka ii_prvi_cas_prakticnih_vjezbi

9

Učitavanje Oracle drajvera Učitavanje Oracle-ovog drajvera:Class.forName(“oracle.jdbc.driver.OracleDriver”);

forName je poziv statičke metode klase Class Instance klase Class predstavljaju klase i

interfejse pokrenute Java aplikacije Statička metoda forName vraća inicijalizovan

objekat klase Class koji odgovara klasi čiji naziv je dat parametrom metode

Page 10: Baze podataka ii_prvi_cas_prakticnih_vjezbi

10

Učitavanje Oracle drajvera

Klasa OracleDriver je osnovna klasa Oracle-ovog drajvera

Njeno učitavanje pozivom metode forName poziva metodu registerDriver klase DriverManager čime se konkretan drajver registruje na jedinstvenom mestu

Page 11: Baze podataka ii_prvi_cas_prakticnih_vjezbi

11

Otvaranje konekcije Otvaranje konekcije nakon što je drajver

učitanConnection conn = DriverManager.getConnection(“jdbc:oracle:thin:@adresa:1521:SID”, “username”, “password”);

Prvi parametar metode getConnection je string koji sadrži podatke potrebne drajveru za povezivanje sa SUBP

Page 12: Baze podataka ii_prvi_cas_prakticnih_vjezbi

12

Otvaranje konekcije

Taj string obično sadrži: adresu računara na kom se nalazi SUBP

(localhost, ako je SUBP na lokalnom računaru; archimedes.is.im.ns.ac.yu)

TCP port na kom SUBP očekuje klijente (1521)

naziv baze kojoj se pristupa (orais)

Page 13: Baze podataka ii_prvi_cas_prakticnih_vjezbi

13

Otvaranje konekcije

Druga dva parametra metode getConnection su korisničko ime (baze2) i lozinka (trecac) kojima se vrši prijavljivanje na SUBP

Page 14: Baze podataka ii_prvi_cas_prakticnih_vjezbi

14

Rezultat uspešnog uspostavljanja veze sa SUBP je inicijalizovani Connection objekat

Connection je interfejs i ne može imati svoje instance, ali ovde se radi o instanci klase koja implementira Connection interfejs

U slučaju Oracle drajvera, ta klasa je OracleConnection, koja sadrži kod koji je specifičan za komunikaciju sa Oracle serverima

Page 15: Baze podataka ii_prvi_cas_prakticnih_vjezbi

15

Metoda forName može da izazove izuzetak ClassNotFoundException

metoda getConnection, kao i sve ostale JDBC metode, može da izazove izuzetak SQLException

Pozivi metoda moraju biti smešteni u try/catch blok

Prilikom završetka komunikacije sa bazom, potrebno je zatvoriti otvorenu konekciju pozivom metode close() klase Connection

Page 16: Baze podataka ii_prvi_cas_prakticnih_vjezbi

16

Zaključak

Konačan rezultat ovakvog koncepta je program koji operiše nad objektima kojima pristupa preko njihovih standardnih interfejsa

Konkretne klase koje implementiraju te interfejse ne spominju se nigde u programu

Page 17: Baze podataka ii_prvi_cas_prakticnih_vjezbi

17

Zaključak

Jedino mesto gde se specificira koja biblioteka klasa će biti upotrebljena je učitavanje drajvera i otvaranje konekcije sa SUBP

Isti JDBC programski kod se može koristiti sa različitim SUBP zamenom drajvera

Page 18: Baze podataka ii_prvi_cas_prakticnih_vjezbi

18

Microsoft Access baza Primer povezivanja na Microsoft Access

bazu: učitavanje drajveraClass.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

otvaranje konekcijeConnection conn = DriverManager.getConnection("jdbc:odbc:baza", "", "");

Page 19: Baze podataka ii_prvi_cas_prakticnih_vjezbi

19

Postavljanje upita

Page 20: Baze podataka ii_prvi_cas_prakticnih_vjezbi

20

Primeri koriste šemu baze podataka prikazanu na slici:

Nastavnicinastavnik_ID : NUMBER(5, 0)ime : VARCHAR2(50)prezime : VARCHAR2(25)zvanje : VARCHAR2(25)

Predajenastavnik_ID : NUMBER(5, 0)predmet_ID : NUMBER(5, 0)

0..*

1

0..*

1

<<Identifying>>

Predmetipredmet_ID : NUMBER(5, 0)naziv : VARCHAR2(150)

0..*

1

0..*

1

<<Identifying>>

Page 21: Baze podataka ii_prvi_cas_prakticnih_vjezbi

21

Postavljanje upita SQL naredba je, u okviru JDBC drajvera.

definisana Statement objektom On se kreira nakon uspostavljene veze

iskazom:Statement stmt = conn.createStatement();

conn je inicijalizovani Connection objekat

Page 22: Baze podataka ii_prvi_cas_prakticnih_vjezbi

22

Slanje upita serveru Za slanje upita serveru koristi se metoda executeQuery čiji parametar je string koji sadrži tekst SQL upita

ResultSet rset = stmt.executeQuery(“SELECT ime, prezime from Nastavnici”);

Rezultat ove metode je inicijalizovani objekat klase ResultSet, koji je namenjen za skladištenje rezultata upita u vidu pomoćne tabele

Page 23: Baze podataka ii_prvi_cas_prakticnih_vjezbi

23

Čitanje rezultata

Čitanje rezultata upita se odvija red-po-red, a za kretanje kroz zamišljenu tabelu se koristi koncept tekućeg reda

Verzija 1.22 JDBC interfejsa dozvoljava pomeranje tekućeg reda od početka, ka kraju tabele, bez preskakanja i bez više prolaza

Page 24: Baze podataka ii_prvi_cas_prakticnih_vjezbi

24

Čitanje rezultata Verzija 2.0 JDBC interfejsa omogućava

prolazak kroz tabelu u oba smera – veća fleksibilnost

Po otvaranju upita nijedan red se ne proglašava tekućim do poziva metode next() klase ResultSet

Ukoliko tabela nije prazna, prvi red postaje tekući

Page 25: Baze podataka ii_prvi_cas_prakticnih_vjezbi

25

Čitanje rezultata next() vraća boolean vrednost koja

označava da li novi tekući red postoji ili ne Za tekući red rezultata, pojedine vrednosti

polja se čitaju pomoću metoda getString(), getInt(), getDate(), itd. (za svaki tip podatak u bazi postoji odgovarajuća metoda

Parametar getXXX() metoda je redni broj kolone koja se čita

Redni brojevi počinju od 1!

Page 26: Baze podataka ii_prvi_cas_prakticnih_vjezbi

26

Čitanje rezultata Za konverziju između tipova podataka baze i

jezika Java je zadužen JDBC drajver Nakon prestanka korišćenja objekta ResultSet, potrebno je pozvati metodu close() radi oslobađanja resursa koje je objekat zauzimao

Ukoliko se prethodna dva pravila ne poštuju može doći do grešaka koje se teško otkrivaju

Page 27: Baze podataka ii_prvi_cas_prakticnih_vjezbi

27

Zadatak 1 Zadatak:

Napisati program koji čita imena i prezimena svih nastavnika i ispisuje ih na konzoluPotrebni parametri: Host URL (archimedes.is.im.ns.ac.yu) SID (orais) username (baze2) password (trecac)

Demo1.java