You are on page 1of 35

Internet programiranje

Java i rad sa podacima

© SI1P1 – 2004 1/15


Java i baze podataka
ƒ podsistem za komunikaciju sa RDBMS 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.
ƒ DBC je predstavljen u obliku na nivou poziva SQL interface za
Javu.
ƒ 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 abstraktnih Java interface koji dozvoljavaju
programeru da ostvari konekciju sa određenom bazom
podataka, izvrši SQL naredbe i obradi dobijene rezultate.

© SI1P1 – 2004 2/15


Realizacija

Driver Manager

Connection Connection Connection

Statement Statement Statement Statement

Resultset Resultset Resultset

© SI1P1 – 2004 3/15


JDBC drajveri

ƒ skup klasa koje implementiraju interfejse iz paketa


java.sql
ƒ obezbjeđ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, uz korišćenje odgovarajućeg
JDBC drajvera

© SI1P1 – 2004 4/15


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

© SI1P1 – 2004 5/15


Pristup bazi podataka
iz Java aplikacije

Java
JDBC RDBMS
aplikacija TCP/IP mreža

WWW server
Java
JDBC
aplet TCP/IP mreža
RDBMS

WWW server
Java
RDBMS
aplet Java
© SI1P1 – 2004
JDBC 6/15
server
Složeniji troslojni model

RDBMS

WWW server RDBMS


Java
aplet Java ...
JDBC
server
RDBMS

© SI1P1 – 2004 7/15


CGI skriptovi

RDBMS

WWW server
WWW RDBMS
čitač JDBC
CGI ...

RDBMS

© SI1P1 – 2004 8/15


Servleti

RDBMS

WWW server
WWW RDBMS
čitač JDBC
servlet ...

RDBMS

© SI1P1 – 2004 9/15


Osnovne klase

ƒ java.sql.DriverManager sprovodi učitavanje driver-a


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

ƒ JDBC URL ima sledeću strukturu:


jdbc:<subprotocol>:<subname>
ƒ subprotocol je ime određene vrste mehanizma
pristupa bazi podataka koji može biti podržan od
jednog ili više drajvera. Sadržaj i sintaksa dela
subname zavisi od subprotocola.
ƒ JDBC management nivo mora da zna koji drajver je
raspoloživ i koji drajver se koristi.
ƒ Primer inicijalizacije drajvera baze podataka:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Class.forName("org.gjt.mm.mysql.Driver”);

© SI1P1 – 2004 11/15


Elementi JDBC drajvera

ƒ Connection
ƒ Statement
ƒ PreparedStatement
ƒ CallableStatement
ƒ ResultSet
ƒ ResultSetMetaData

© SI1P1 – 2004 12/15


Primer

STUDENT
STUDENT_ID INTEGER
IME VARCHAR(25)
PREZIME VARCHAR(25)

© SI1P1 – 2004 13/15


Uspostavljanje veze
ƒ Učitavanje JDBC drajvera
Class.forName(“com.mysql.jdbc.Driver");
Class.forName(“com.informix.jdbc.IfxDriver");
Class.forName("oracle.jdbc.driver.OracleDriver");
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Uspostavljanje veze
Connection conn =
DriverManager.getConnection(
"jdbc:mysql://student.etfbl.net:3306/STUDENT",
“USERNAME", “PASSWORD");
Connection conn =
DriverManager.getConnection(
"jdbc:informix-sqli://student.etfbl.net:1526/STUDENT:INFORMIXSERVER=ds_server",
“USERNAME", “PASSWORD");
Connection conn =
DriverManager.getConnection(
"jdbc:oracle:thin:@student.etfbl.net:1526:STUDENT",
“USERNAME", “PASSWORD");
Connection conn =
DriverManager.getConnection(
"jdbc:odbc:student",
“USERNAME", “PASSWORD");

© SI1P1 – 2004 14/15


Izuzeci
ƒ Učitavanje JDBC drajvera
Class.forName(“com.mysql.jdbc.Driver"); - ClassNotFoundException

ƒ Uspostavljanje veze
Connection conn =
DriverManager.getConnection(
"jdbc:mysql://student.etfbl.net:3306/STUDENT",
“USERNAME", “PASSWORD"); - SQLException

ƒ Ostale metode – SQLException


ƒ try-catch blok
ƒ Završetak komunikacije s bazom podataka - metoda close() klase
Connection

© SI1P1 – 2004 15/15


Postavljanje upita

ƒ Statement i ResultSet
String query = "SELECT ime, prezime FROM studenti";
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery(query);

while (rset.next()) {
System.out.println(
rset.getString(1) + " " + rset.getString(2));
}

rset.close();
stmt.close();

© SI1P1 – 2004 16/15


DML naredbe

ƒ INSERT, UPDATE, DELETE


String query = “INSERT INTO studenti (ime,
prezime) VALUES (‘Nenad’, ‘Nenadovic’) ";
Statement stmt = conn.createStatement();
int n = stmt.executeUpdate(query);
stmt.close();

© SI1P1 – 2004 17/15


Izvršavanje istih SQL naredbi više puta
uzastopno
ƒ PreparedStatement
PreparedStatement stmt = conn.prepareStatement(
"INSERT INTO studenti (id, ime, prezime) values (?, ?, ?)");

stmt.setInt(1, 1);
stmt.setString(2, new String(“Marko"));
stmt.setString(3, new String(“Markovic"));
stmt.executeUpdate();

stmt.setInt(1, 2);
stmt.setString(2, new String(“Nenad"));
stmt.setString(3, new String(“Nenadovic"));
stmt.executeUpdate();

stmt.close();

ƒ U slučaju SELECT naredbe poziva se stmt.executeQuery();


© SI1P1 – 2004 18/15
Pozivanje uskladištenih procedura i
funkcija

ƒ Procedure koje se smještaju u okviru baze podataka


ƒ Dostupne za pozivanje od strane klijenta
ƒ Proširenja SQL-a (PL/SQL, Transact-SQL,...)

© SI1P1 – 2004 19/15


Pozivanje uskladištenih procedura i funkcija
ƒ CallableStatement
// pozivamo funkciju uradi
CallableStatement stmt = conn.prepareCall(
"{? = call uradi (?, ?)}");
za funkcije
// postavljamo parametre
stmt.setString(2, new String("Sima"));
stmt.setString(3, new String("Simic"));
stmt.registerOutParameter(1, Types.INTEGER);
stmt.executeQuery();

// citamo rezultat funkcije


System.out.println("Status: " + stmt.getInt(1));

© SI1P1 – 2004 20/15


Primer 2
import java.sql.*;
public class JDBCDemoCreateTable {
public static void main(String[] args) {
// 1. step loading the driver
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

// 2. step making the connection


String url = "jdbc:odbc:Primer2" ;
String myLogin = "mika" ; // the name you use to log in to the DBMS
String myPassword = "mika" ; // your password for the DBMS
try {
Connection con = DriverManager.getConnection( url, myLogin,
myPassword );
String createTableCoffees = "CREATE TABLE COFFEES " +
"(COF_NAME VARCHAR(32), SUP_ID INTEGER, PRICE FLOAT, " +
"SALES INTEGER, TOTAL INTEGER)";
// 3. step creating JDBC sStatement.
Statement stmt = con.createStatement();
stmt.executeUpdate(createTableCoffees);
} catch ( SQLException e ) { System.err.println( e ); }
}catch ( ClassNotFoundException e) { System.out.println("Error : " + e ); }
© SI1P1 – 2004 21/15
}
}
Primer 2
import java.sql.*;
public class JDBCDemoUpdateTable {
public static void main(String[] args) {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
try {
Connection con = DriverManager.getConnection( "jdbc:odbc:Primer2",
"mika", "mika" );
Statement stmt = con.createStatement();
String updateTableCoffees = "INSERT INTO COFFEES VALUES ('Col', 101, 7,
0, 0)" ;
stmt.executeUpdate( updateTableCoffees );
updateTableCoffees = "INSERT INTO COFFEES VALUES ('French_Roast', 49, 8.99, 0,
0)" ;
stmt.executeUpdate( updateTableCoffees );
updateTableCoffees = "INSERT INTO COFFEES VALUES ('Espresso', 150, 9.99, 0,
0)" ;
stmt.executeUpdate( updateTableCoffees );
updateTableCoffees = "INSERT INTO COFFEES VALUES ('Colombian_Dec', 101, 9.1,
0, 0)" ;
stmt.executeUpdate( updateTableCoffees );
updateTableCoffees = "INSERT INTO COFFEES VALUES ('French', 49, 9.99, 0, 0)" ;
stmt.executeUpdate( updateTableCoffees );
22/15
} catch ( SQLException e ) { System.err.println( e ); }
© SI1P1 – 2004

}catch ( ClassNotFoundException e) { System.out.println("Error : " + e ); }


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

try {
Connection con = DriverManager.getConnection(
"jdbc:odbc:BootCamp", "mika", "mika" );
PreparedStatement updateSalesPrepared = con.prepareStatement(
"UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ?");

int [] salesForWeek = {175, 150, 60, 155, 90};


String [] coffees = {"Colombian", "French_Roast", "Espresso",
"Colombian_Decaf",
"French_Roast_Decaf"};
int len = coffees.length;
for(int i = 0; i < len; i++) {
updateSalesPrepared.setInt(1, salesForWeek[i]); // setting up
first parameter
updateSalesPrepared.setString(2, coffees[i]); // setting up
second parameter
updateSalesPrepared.executeUpdate(); // executing update
© SI1P1 – 2004 24/15
}
Statement stmt = con.createStatement();
String queryTableCoffees = "SELECT COF_NAME, SALES FROM
COFFEES" ;
ResultSet rs = stmt.executeQuery( queryTableCoffees );

while (rs.next()) {
String coffeName = rs.getString("COF_NAME");
int sales = rs.getInt(2);
System.out.println( coffeName + " " + sales );
}
} catch ( SQLException e ) { System.err.println( e ); }
} catch ( ClassNotFoundException e) { System.out.println("Error :
" + e ); }
}
}

© SI1P1 – 2004 25/15


import java.sql.*;
public class JDBCDemoCallableStatement {
public static void main(String[] args) {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:BootCamp" ;
String myLogin = "mika" ; // the name you use to log in to the
DBMS
String myPassword = "mika" ; // your password for the DBMS
try {
Connection con = DriverManager.getConnection( url, myLogin,
myPassword );
// A stored procedure is a group of SQL statements that form a logical
unit and perform a particular task
String createProcedure = "create procedure
SHOW_SUPPLIERS " +
"as " +
"select SUPPLIERS.SUP_NAME,
COFFEES.COF_NAME " +
"from SUPPLIERS, COFFEES " +
"where SUPPLIERS.SUP_ID =
COFFEES.SUP_ID " +
"order by SUP_NAME";
© SI1P1 – 2004 26/15
Statement stmt = con.createStatement();
stmt.executeUpdate(createProcedure);
// Calling a Stored Procedure from JDBC
CallableStatement cs = con.prepareCall("{call
SHOW_SUPPLIERS}");
ResultSet rs = cs.executeQuery();

while (rs.next()) {
String supName = rs.getString("SUP_NAME");
String coffyName = rs.getString("COF_NAME");
System.out.println( supName + " " + coffyName );
}
}catch ( SQLException e ) { System.err.println( e ); }
} catch ( ClassNotFoundException e) { System.out.println("Error :
" + e ); }
}
}

© SI1P1 – 2004 27/15


Dijagram izvršavanja

© SI1P1 – 2004 28/15


LON LON
SMA VAR GVA VAR GVA TIME
SQL TINY LLIN INTE BIGI REA FLO DOU DECI NUM CHA CHA RCH BINA BINA RBIN DAT STA
type INT T GER NT L AT BLE MAL ERIC BIT R R AR RY RY ARY E TIME MP

java. java.
math. math. java.s
BigD BigD java.s java.s ql.Ti
Java ecima ecima boole doubl doubl ql.Dat ql.Ti mesta
Type String String String l l an byte short int long float e e byte[] byte[] byte[] e me mp

getBy
te X x x x x x x x x x x x x

getSh
ort x X x x x x x x x x x x x

getInt x x X x x x x x x x x x x

getLo
ng x x x X x x x x x x x x x

getFl
oat x x x x X x x x x x x x x

getDo
uble x x x x x X X x x x x x x

getBi 29/15
© SI1P1 – 2004
gDeci
mal x x x x x x x X X x x x x
LON LON
SMA VAR GVA VAR GVA TIME
SQL TINY LLIN INTE BIGI REA FLO DOU DECI NUM CHA CHA RCH BINA BINA RBIN DAT STA
type INT T GER NT L AT BLE MAL ERIC BIT R R AR RY RY ARY E TIME MP

java. java.
math. math. java.s
BigD BigD java.s java.s ql.Ti
Java ecima ecima boole doubl doubl ql.Dat ql.Ti mesta
Type String String String l l an byte short int long float e e byte[] byte[] byte[] e me mp

getBo
olean x x x x x x x x x X x x x

getStr
ing x x x x x x x x x x X X x x x x x x x

getBy
tes X X x

getDa
te x x x X x

getTi
me x x x X x

getTi
mesta
mp x x x x x X

getAs
ciiStr
eam x x X x x x

getUn
icode
Strea
m x x X x x x

getBi
naryS
tream x x X

© SI1P1 – 2004 30/15


getOb
ject x x x x x x x x x x x x x x x x x x x
Upravljanje transakcijama

ƒ conn.commit();
ƒ conn.rollback();
ƒ conn.setAutoCommit(false);

© SI1P1 – 2004 31/15


Klasa Vector
java.lang.Object
|
+--java.util.AbstractCollection
|
+--java.util.AbstractList
|
+--java.util.Vector
Vector v = new Vector();
Vector v = new Vector(25);
v.addElement("carrots");
v.addElement("broccoli");
v.addElement("cauliflower");
String s = (String)v.lastElement();
String s1 = (String)v.elementAt(0);
String s2 = (String)v.elementAt(2);
v.insertElementAt("squash", 1);
v.insertElementAt("corn", 0);
v.removeElementAt(3);
© SI1P1 – 2004 32/15
Klasa Vector
v.setElementAt("peas", 1);
v.removeAllElements();
boolean isThere = v.contains("celery");
int i = v.indexOf("squash");
v.removeElement("cauliflower");
int size = v.size();
v.setSize(10);

© SI1P1 – 2004 33/15


Klasa Vector
import java.util.* ;
class VectorDemo {
public static void main(String[] args) {
Vector a = new Vector();
a.addElement( new Boolean(true));
a.addElement( new Integer(5));
a.addElement( "some string" );
a.addElement( new Double(5.2));
a.addElement( new Date());
System.out.println( "a.toString()= " + a.toString() );
System.out.println( "a.size()= " + a.size() );
for ( int i = 0 ; i < a.size() ; i++ ){
System.out.print( "a.get( " + i + " ) =" + a.get(i) + " " );
System.out.println( "a.elementAt( " + i + " ) = " +
a.elementAt(i) );
}
}
}
© SI1P1 – 2004 34/15
Klasa Vector
import java.util.* ;
class VectorDemo1 {
public static void main(String[] args) {
Vector matrix = new Vector();
for ( int i = 0 ; i < 5 ; i++ ){
Vector row = new Vector();
for ( int j = 0 ; j < 6 ; j++ ){
row.addElement((new Integer(i)).toString()+(new
Integer(j)).toString() );
}
matrix.addElement(row);
}
for ( int i = 0 ; i < 5 ; i++ ){
System.out.println();
for ( int j = 0 ; j < 6 ; j++ ){
System.out.print( ((Vector)matrix.elementAt(i)).elementAt(j) + "
" );
}
}
}
}
© SI1P1 – 2004 35/15

You might also like