SQL Applicazioni
SQL Applicazioni
Sommario
• SQL: caratteristiche evolute
– Funzioni scalari
– Transazioni
• SQL per le applicazioni
SQL: Caratteristiche evolute
Funzioni scalari
• Oltre alle funzioni aggregate di cui abbiamo già
parlato, SQL mette a disposizione diverse funzioni
scalari
• Possono essere utilizzate all’interno delle
espressioni del linguaggio
• Ricevono come argomento una o più espressioni
del linguaggio ciascuna delle quali restituisce valori
di un dominio elementare per ogni tupla su cui si
valuta la query
• Restituiscono un valore per ogni tupla
Famiglie di funzioni
DBMS
JDBC tipo 3: Middleware server
• Prevede l’uso di un server
JAVA che traduce le JVM
richieste provenienti dal
driver manager nel formato Java Application
riconosciuto dallo specifico
DBMS JDBC Driver Manager
• Esistono prodotti che
realizzano funzioni di JDBC Middleware
questo tipo permettendo di (vari DBMS)
interagire con diversi DBMS
DBMS
JDBC tipo 4: Driver Java
• Prevede l’uso di un driver
JAVA per lo specifico JVM
DBMS
Java Application
DBMS
JDBC: uso
• Per utilizzare JDBC si opera secondo i seguenti
passi:
– Si carica il driver richiesto
– Si crea una connessione con il DB
– Si compone un comando SQL e lo si invia alla base di
dati
– Si gestisce il risultato
JDBC: esempio
import java.sql.*;
public class PrimoJdbc{
public static void main(String[] args){
Connection conn=null;
try{
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
conn=DriverManager.getConnection(“jdbc:odbc:Corsi”)
Statement interrogazione=conn.createStatement();
ResultSet risultato=interrogazione.executeQuery(
“select * from corsi”);
while(risultato.next()){
String nomeCorso=risultato.getString(“NomeCorso”)
System.out.println(nomeCorso);
}
} catch (Exception e){System.exit(1);}
}
}
JDBC: la connessione
• Per ottenere una connessione al DB si usa il
metodo statico getConnection della classe
DriverManager al quale va passato un indirizzo nel
seguente formato:
jdbc:subprotocol:subname
– subprotocol: dipende dallo specifico DBMS
– subname: indirizzo del DB (di solito il nome)
• Il metodo getConnection può ricevere anche una
username e una password
JDBC: la connessione
import java.sql.*;
public class PrimoJdbc{
public static void main(String[] args){
Connection conn=null;
try{
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
conn=DriverManager.getConnection(“jdbc:odbc:Corsi”)
Statement interrogazione=conn.createStatement();
ResultSet risultato=interrogazione.executeQuery(
“select * from corsi”);
while(risultato.next()){
String nomeCorso=risultato.getString(“NomeCorso”)
System.out.println(nomeCorso);
}
} catch (Exception e){System.exit(1);}
}
}
JDBC: la classe Statement
• Uno oggetto Statement si ottiene (di solito)
invocando il metodo createStatement della classe
Connection
• I metodi principali della classe Statement sono:
– executeQuery: per eseguire una istruzione SELECT
– executeUpdate: per eseguire una istruzione INSERT,
DELETE, UPDATE
JDBC: la classe Statement
import java.sql.*;
public class PrimoJdbc{
public static void main(String[] args){
Connection conn=null;
try{
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
conn=DriverManager.getConnection(“jdbc:odbc:Corsi”)
Statement interrogazione=conn.createStatement();
ResultSet risultato=interrogazione.executeQuery(
“select * from corsi”);
while(risultato.next()){
String nomeCorso=risultato.getString(“NomeCorso”)
System.out.println(nomeCorso);
}
} catch (Exception e){System.exit(1);}
}
}
JDBC: la classe PreparedStatement
• Uno oggetto PreparedStatement serve a creare
interrogazioni parametriche
• ottiene (di solito) invocando il metodo
prepareStatement della classe Connection
• I metodi principali della classe Statement sono:
– executeQuery: per eseguire una istruzione SELECT
– executeUpdate: per eseguire una istruzione INSERT,
DELETE, UPDATE
– setXXX: per settare i parametri (esiste un metodo per
ogni tipo)
JDBC: la classe PreparedStatement
...
PreparedStatement updateSales = con.prepareStatement( "UPDATE
COFFEES SET SALES = ? WHERE COF_NAME LIKE ?");
...
updateSales.setInt(1, 75);
updateSales.setString(2, "Colombian");
updateSales.executeUpdate();
• È equivalente a: