Baze podataka ii_prvi_cas_prakticnih_vjezbi

1,178 views
1,017 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,178
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
16
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Baze podataka ii_prvi_cas_prakticnih_vjezbi

  1. 1. Baze podataka II Rad sa relacionim bazama podataka u programskom jeziku Java 1
  2. 2. Uvod 2
  3. 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 3
  4. 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 4
  5. 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 5
  6. 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 6
  7. 7. Uspostavljanje veze sa bazom podataka 7
  8. 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 8
  9. 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 9
  10. 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 10
  11. 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 11
  12. 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) 12
  13. 13. Otvaranje konekcije Druga dva parametra metode getConnection su korisničko ime (baze2) i lozinka (trecac) kojima se vrši prijavljivanje na SUBP 13
  14. 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 14
  15. 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 15
  16. 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 16
  17. 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 17
  18. 18. Microsoft Access baza Primer povezivanja na Microsoft Access bazu:  učitavanje drajvera Class.forName(“sun.jdbc.odbc. JdbcOdbcDriver”);  otvaranje konekcije Connection conn = DriverManager.getConnection( "jdbc:odbc:baza", "", ""); 18
  19. 19. Postavljanje upita 19
  20. 20.  Primeri koriste šemu baze podataka prikazanu na slici: Nastavnici nastavnik_ID : NUMBER(5, 0) Predmeti ime : VARCHAR2(50) predmet_ID : NUMBER(5, 0) prezime : VARCHAR2(25) naziv : VA RCHAR2(150) zvanje : VARCHAR2(25) 1 1 <<Identifying>> <<Identifying>> 0..* 0..* Predaje nastavnik_ID : NUMBER(5, 0) predmet_ID : NUMBER(5, 0) 20
  21. 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 21
  22. 22. Slanje upita serveru Za slanje upita serveru koristi se metoda executeQuery čiji parametar je string koji sadrži tekst SQL upitaResultSet 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 22
  23. 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 23
  24. 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 24
  25. 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! 25
  26. 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 26
  27. 27. Zadatak 1 Zadatak: Napisati program koji čita imena i prezimena svih nastavnika i ispisuje ih na konzolu Potrebni parametri:  Host URL (archimedes.is.im.ns.ac.yu)  SID (orais)  username (baze2)  password (trecac) Demo1.java 27

×