Programiranje Internet alikacija Java i rad sa podacima

Java i baze podataka
• podsistem za komunikaciju sa RDBMS (Relational database management system) serverima zasnovanim na SQL-u • celokupan podsistem je definisan u standardnom paketu java.sql • ODBC i JDBC – Open Database Connectivity (ODBC) je standardni API za povezivanje sa RDBMS • JDBC je JAVA API za baze podataka bazirane na SQL jeziku. • pomoću klasa iz ovog paketa se mogu izvršavati SQL naredbe i manipulisati sa rezultatima dobijenim na osnovu ovih naredbi.

• JDBC API sadrži niz apstraktnih Java interface-a koji dozvoljavaju programeru da ostvari konekciju sa određenom bazom podataka, izvrši SQL naredbe i obradi dobijene rezultate.
2/27

Struktura Driver Manager Connection Connection Connection Statement Statement Statement Statement Resultset Resultset Resultset 3/27 .

sql • obezbeđuje ih svaki proizvođač RDBMS servera za svoje sisteme • svi drajveri se na isti način koriste • instalacija drajvera = uključivanje u CLASSPATH • isti Java kod se može koristiti za rad sa serverima različitih proizvođača.JDBC drajveri • skup klasa koje implementiraju interfejse iz paketa java. uz korišćenje odgovarajućeg JDBC drajvera 4/27 .

JDBC i klijent/server model • • • • • pristup bazi podataka iz Java aplikacije dvoslojni (two-tier) model troslojni (three-tier) model CGI skriptovi i servleti Web servisi 5/27 .

Pristup bazi podataka iz Java aplikacije Java JDBC aplikacija TCP/IP mreža RDBMS Java aplet JDBC WWW server TCP/IP mreža RDBMS WWW server Java aplet Java server 6/27 RDBMS JDBC .

..Servleti RDBMS WWW server WWW čitač servlet JDBC RDBMS . RDBMS 7/27 .

CallableStatement za izvršavanje poziva stored procedura koje postoje u okviru baze podataka.sql.sql.Statement izvršava se u obliku container-a za izvršavanje SQL naredbi u okviru uspostavljene konekcije • java.Statement interface ima dva važna podtipa: – java.PreparedStatement za izvršavanje pre-kompajlirane SQL naredbe – java. 8/27 .Connection predstavlja konekciju sa određenom bazom podataka • java.DriverManager sprovodi učitavanje driver-a baze podataka i omogućava podršku za kreiranje nove konekcije • java.Osnovne klase • java.sql.sql.ResultSet kontroliše pristup rezultatima dobijenim izvršavanjem određene SQL naredbe • java.sql.sql.sql.

mysql.Inicijalizacija • JDBC URL ima sledeću strukturu: jdbc:<subprotocol>:<name> • podataka koji može biti podržan od jednog ili više drajvera.mm. Class.odbc. subprotocol je ime određene vrste mehanizma pristupa bazi • JDBC management nivo mora da zna koji drajver je raspoloživ i koji drajver se koristi.forName("sun.gjt.forName("org.Driver”). 9/27 .JdbcOdbcDriver"). Sadržaj i sintaksa dela name zavisi od subprotocola. • primer inicijalizacije drajvera baze podataka: Class.jdbc.

Elementi JDBC drajvera • • • • • • Connection Statement PreparedStatement CallableStatement ResultSet ResultSetMetaData 10/27 .

Primer 1 STUDENT STUDENT_ID IME PREZIME INTEGER VARCHAR(25) VARCHAR(25) 11/27 .

JdbcOdbcDriver").Driver").mysql. “PASSWORD"). “USERNAME". “USERNAME".etfbl. Class.jdbc.jdbc. Class. Connection conn = DriverManager.Uspostavljanje veze • Učitavanje JDBC drajvera Class.jdbc.net:3306/STUDENT".forName("oracle. Class.getConnection( "jdbc:mysql://student. • Uspostavljanje veze: Connection conn = DriverManager.IfxDriver").jdbc.driver.OracleDriver").getConnection( "jdbc:oracle:thin:@student.net:1526:STUDENT". “USERNAME".getConnection( "jdbc:informixsqli://student.net:1526/STUDENT:INFORMIXSERVER=ds_server". . “PASSWORD"). Connection conn = DriverManager. “PASSWORD").forName("sun.getConnection( "jdbc:odbc:student“.informix.etfbl. Connection conn = DriverManager. “PASSWORD").etfbl.odbc.forName(“com. “USERNAME".forName(“com.

SQLException • • • Ostale metode – SQLException try-catch blok Završetak komunikacije s bazom podataka .net:3306/STUDENT".forName(“com.ClassNotFoundException • Uspostavljanje veze Connection conn = DriverManager. . . “USERNAME".metoda close() klase Connection 13/27 .Driver").etfbl.Izuzeci • Učitavanje JDBC drajvera Class. “PASSWORD").getConnection( "jdbc:mysql://student.jdbc.mysql.

prezime FROM studenti".executeQuery(query). } rset.createStatement().Postavljanje upita • Statement i ResultSet String query = "SELECT ime.close().getString(2)). 14/27 .println( rset.out. Statement stmt = conn.next()) { System. stmt.close(). ResultSet rset = stmt. while (rset.getString(1) + " " + rset.

close(). 15/27 . „Nenadovic‟) ". Statement stmt = conn.createStatement(). prezime) VALUES („Nenad‟. UPDATE.executeUpdate(query). stmt. int n = stmt.DML naredbe • INSERT. DELETE String query = “INSERT INTO studenti (ime.

new String(“Nenadovic")). ?.Izvršavanje istih SQL naredbi više puta uzastopno • PreparedStatement PreparedStatement stmt = conn.executeUpdate(). stmt. • U slučaju SELECT naredbe poziva se stmt. ?)").executeUpdate(). stmt. 1). 2).executeQuery(). new String(“Markovic")). new String(“Nenad")).setString(2.close(). prezime) values (?.prepareStatement( "INSERT INTO studenti (student_id. stmt. stmt. ime. new String(“Marko")). stmt.setString(3. 16/27 . stmt.setInt(1. stmt. stmt.setString(3.setString(2. stmt.setInt(1.

Transact-SQL..Pozivanje uskladištenih procedura i funkcija (stored procedures) • Procedure koje se smeštaju u okviru baze podataka • Dostupne za pozivanje od strane klijenta • Proširenja SQL-a (PL/SQL...) 17/27 .

executeQuery(). new String("Simic")).registerOutParameter(1. ?)}").println("Status: " + stmt. Types. za funkcije // postavljamo parametre stmt.getInt(1)). // citamo rezultat funkcije System.Pozivanje uskladištenih procedura i funkcija • CallableStatement // pozivamo funkciju uradi CallableStatement stmt = conn.setString(3.out. stmt.INTEGER).prepareCall( "{? = call uradi (?. new String("Sima")).setString(2. 18/27 . stmt. stmt.

SUP_ID INTEGER. step loading the driver try { Class.jdbc.println(e).forName("sun.Primer 2 import java.sql. } catch ( SQLException e ) { System.getConnection(url. // 3. String createTableCoffees = "CREATE TABLE COFFEES " + "(COF_NAME VARCHAR(32).println( e ).executeUpdate(createTableCoffees). pass). } }catch ( ClassNotFoundException e) {System. stmt. // your password for the DBMS String pass = "mika”. // 2. " +"SALES INTEGER. TOTAL INTEGER)". PRICE FLOAT. } } 19/27 } .*. user. // the name you use to log in to the DBMS String user = "mika" . step creating JDBC statement.odbc. Statement stmt = con.err.out. step making the connection String url = "jdbc:odbc:Primer2" . try { Connection con = DriverManager.JdbcOdbcDriver"). public class JDBCDemoCreateTable { public static void main(String[] args) { // 1.createStatement().

forName("sun. String updateTableCoffees ="INSERT INTO COFFEES VALUES”+ “('Col'.executeUpdate( updateTableCoffees ).0.executeUpdate( updateTableCoffees ).8. updateTableCoffees="INSERT INTO COFFEES VALUES('Colombian„. Statement stmt = con.executeUpdate( updateTableCoffees ).getConnection( "jdbc:odbc:Primer2".createStatement().Primer 2 import java. updateTableCoffees="INSERT INTO COFFEES VALUES('Espresso„.9.jdbc.err.0.println( e ).executeUpdate( updateTableCoffees ). public class JDBCDemoUpdateTable { public static void main(String[] args) { try { Class.out.9.99.99.0)”. stmt. 7. "mika". 0)" .49. stmt.1.0.*. 0. }catch ( ClassNotFoundException e) {System. Connection con= DriverManager.98. updateTableCoffees ="INSERT INTO COFFEES VALUES('French„.odbc. 101.sql.0)".JdbcOdbcDriver"). stmt. stmt.0)”.99. } } } 20/27 .0)”. stmt.80. updateTableCoffees="INSERT INTO COFFEES VALUES('French„.49.9. 0.println(e). }catch ( SQLException e ) { System. "mika" ).executeUpdate( updateTableCoffees ).

forName("sun.getInt( 4 ).getString("COF_NAME").next()) { String coffeName = rs.out. System. int total = rs. int sales = rs. int supplierId = rs. SALES.odbc. } } catch ( SQLException e ) { System. ResultSet rs = stmt.out. TOTAL FROM COFFEES" . "mika".getFloat("PRICE"). public class JDBCDemoSelectTable { public static void main(String[] args) { try{ Class.println( coffeName + " " + supplierId + " " + price + " “ +sales + " " + total ).jdbc.createStatement().getInt( 5 ).JdbcOdbcDriver"). Statement stmt = con. String queryTableCoffees ="SELECT COF_NAME. float price = rs. while (rs.getInt("SUP_ID"). Connection con = DriverManager.println(e).executeQuery( queryTableCoffees ).getConnection("jdbc:odbc:Primer2". SUP_ID. } catch ( ClassNotFoundException e) { System.*. "mika" ).println(e ). “ +”PRICE. } } } 21/27 .sql.Primer 2 import java.err.

length. String [] coffees = {"Colombian". int [] salesForWeek = {175. PreparedStatement updateSalesPrepared = con. // setting up second parameter updateSalesPrepared. 90}.executeUpdate().prepareStatement( "UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ?").sql. 150. "Espresso". "French_Roast".jdbc. i < len. "French_Roast_Decaf"}. updateSalesPrepared. public class JDBCDemoPreparedStatement { public static void main(String[] args) { try { Class. // executing update } 22/27 .getConnection( "jdbc:odbc:Primer2".JdbcOdbcDriver").forName("sun. "mika" ). coffees[i]).setString(2.*. for(int i = 0.odbc. i++) { // setting up first parameter updateSalesPrepared. "mika". 60. 155. salesForWeek[i]). int len = coffees.setInt(1.Primer 2 import java. try { Connection con = DriverManager. "Colombian_Decaf".

next()) { String coffeName = rs.getString("COF_NAME"). SALES” + “FROM COFFEES" .getInt(2).println( e ).out.Primer 2 Statement stmt = con. int sales = rs. ResultSet rs = stmt.executeQuery( queryTableCoffees ). System.println( coffeName + " " + sales ). } catch ( ClassNotFoundException e) { System.out.err. String queryTableCoffees = "SELECT COF_NAME.createStatement().println("Error : " + e ). } } catch ( SQLException e ) { System. } } } 23/27 . while (rs.

public class JDBCDemoCallableStatement { public static void main(String[] args) { try{ Class.COF_NAME “ + "from SUPPLIERS. //the name you use to log in to the DBMS String pass = "mika”.JdbcOdbcDriver").user. COFFEES.Primer 2 import java.sql.getConnection(url.jdbc.SUP_NAME. 24/27 . String url = "jdbc:odbc:Primer2" .forName("sun. pass).odbc. // stored procedura je grupa SQL naredbi koja formira logičku // celinu i izvršava određeni zadatak String createProcedure ="create procedure SHOW_SUPPLIERS “ + "as select SUPPLIERS. // your password for the DBMS try { Connection con = DriverManager.SUP_ID = COFFEES.*. String user = "mika”.SUP_ID “ + "order by SUP_NAME". COFFEES “ + "where SUPPLIERS.

String coffyName = rs. }catch ( ClassNotFoundException e) { System.prepareCall("{call SHOW_SUPPLIERS}").println(e ). stmt. ResultSet rs = cs. while (rs.Primer 2 Statement stmt = con.println( supName + " " + coffyName ). System.next()) { String supName = rs.getString("SUP_NAME").createStatement(). } }catch ( SQLException e ) { System.out.out.executeQuery().executeUpdate(createProcedure).println( e ).err.getString("COF_NAME"). } } } 25/27 . // Calling a Stored Procedure from JDBC CallableStatement cs = con.

Dijagram izvršavanja 26/27 .

commit(). • conn. 27/27 .Upravljanje transakcijama • conn. • conn.setAutoCommit(false).rollback().

Sign up to vote on this title
UsefulNot useful