concetti Fondamentali, versione 1.0

annuncio pubblicitario
19/05/2003
Tecnologie di Sviluppo per il Web
Programmazione su Basi di Dati:
JDBC
Concetti Fondamentali
versione 1.0
G. Mecca – [email protected] – Università della Basilicata
JDBC >> Sommario
Concetti Fondamentali
m
Introduzione
ðArchitettura
ðTipi di driver
m
Un Esempio
ðDriver e Driver Manager
ðConnection e URI
ðStatement e Result Set
G. Mecca - Tecnologie di Sviluppo per il Web
2
1
19/05/2003
JDBC >> Concetti Fondamentali >> Introduzione
Introduzione
m
JDBC
ðnon è l’acronimo di Java DataBase
Connectivity
ðesempio di CLI orientata agli oggetti
ðAPI standard di Java 2 SDK
ðarrivata alla versione 3.0 (in J2SDK 1.4.0)
m
Package
ðjava.sql: classi fondamentali
ðjavax.sql: estensioni
3
G. Mecca - Tecnologie di Sviluppo per il Web
JDBC >> Concetti Fondamentali >> Introduzione
Architettura
utilizza
le interfacce
java.sql
e javax.sql
Applicazione Java
Driver Manager
Driver
Driver
Driver
PgSQL
Oracle
File
System
implementano
java.sql e,
in alcuni casi
javax.sql
Conformità:
almeno SQL-92
Entry Level
G. Mecca - Tecnologie di Sviluppo per il Web
4
2
19/05/2003
JDBC >> Concetti Fondamentali >> Introduzione
Tipi di Driver
m
Tipo 1
ðPonte JDBC-ODBC (“JDBC-ODBC Bridge”)
m
Tipo 2
ðParte Java, Parte API Nativa
m
Tipo 3
ðDriver di Rete Tutto in Java
m
Tipo 4
ðDriver Nativo Tutto in Java
5
G. Mecca - Tecnologie di Sviluppo per il Web
JDBC >> Concetti Fondamentali >> Introduzione
Driver di Tipo 1
Client
Applicazione
Driver JDBC Tipo 1
m
Ponte JDBC-ODBC
ðusa un driver ODBC
ðtraduce da JDBC in
chiamate ODBC
ðnormalmente usa una
libreria del DBMS
ðprestazioni scadenti
ðnon indipendente dalla
piattaforma
G. Mecca - Tecnologie di Sviluppo per il Web
Driver ODBC
Libreria del DBMS
Rete
Server
DBMS
6
3
19/05/2003
JDBC >> Concetti Fondamentali >> Introduzione
Driver di Tipo 2
Client
Applicazione
m
Parte Java, Parte API
Nativa
ðsfrutta una libreria del
DBMS
ðtraduce le chiamate in
chiamate alla libreria
ðmigliori prestazioni
ðnon indipendente dalla
piattaforma
Driver JDBC Tipo 2
Libreria del DBMS
Rete
Server
DBMS
7
G. Mecca - Tecnologie di Sviluppo per il Web
JDBC >> Concetti Fondamentali >> Introduzione
Driver di Tipo 3
Client
Applicazione
Driver JDBC Tipo 3
m
Driver di Rete Tutto Java
ðsfrutta un server
intermedio
ðdriver JDBC leggero
ðclient indipendente dalla
piattaforma
ðservizi avanzati (caching)
ðarchitettura complessa
ðtempi di trasferimento
G. Mecca - Tecnologie di Sviluppo per il Web
Rete
Middleware Server
Strato intermedio
Rete
Server
DBMS
8
4
19/05/2003
JDBC >> Concetti Fondamentali >> Introduzione
Driver di Tipo 4
Client
m
Driver Nativo Tutto in
Java
ðil driver comunica
direttamente con il DBMS
ðindipendente dalla
piattaforma
ðbuone prestazioni
ðscaricabile
dinamicamente
G. Mecca - Tecnologie di Sviluppo per il Web
Applicazione
Driver JDBC Tipo 4
Rete
Server
DBMS
9
JDBC >> Concetti Fondamentali >> Introduzione
Tipi di Driver
Tipo 1 fornito a corredo di J2SDK
m Migliori prestazioni e flessibilità:Tipo 3 o 4
m Tipo 3
m
ðapplicazioni di fascia alta
ðservizi avanzati
m
Tipo 4
ðmaggiore semplicità
ðarchitettura semplificata
G. Mecca - Tecnologie di Sviluppo per il Web
10
5
19/05/2003
JDBC >> Concetti Fondamentali >> Un Esempio
Un Esempio
m
Il Sistema Informativo dell’ACI
ðdati su automobili e proprietari
m
Operazioni
ðinserimento dei dati di un proprietario
ðricerca dei proprietari per nome e c.f.
ðinserimento dei dati di un’automobile
ðelenco dei proprietari e delle automobili
ð...
11
G. Mecca - Tecnologie di Sviluppo per il Web
JDBC >> Concetti Fondamentali >> Un Esempio
Un Esempio
Obiettivo: esemplificare l’API JDBC
m Per semplicità
m
ðarchitettura semplificata (architettura di base)
ðinterfaccia basata su console
m
Funzionamento
ðl’utente si identifica con nome utente e password
ða seconda del suo ruolo (utente o amministratore)
accede ad un menu che gli consente di effettuare
varie operazioni
>> il s.i. dell’ACI
G. Mecca - Tecnologie di Sviluppo per il Web
12
6
19/05/2003
JDBC >> Concetti Fondamentali >> Un Esempio
Un Esempio
m
La base di dati
create table utenti (
nomeUtente char(10)
not null primary key,
nome varchar(50),
password varchar(10),
ruolo varchar(50)
)
Supporremo che la base di
dati “universita” sia già stata
creata usando, per esempio,
PostgreSQL
create table proprietari (
codiceFiscale char(16)
not null primary key,
nome varchar(50) not null,
cittaDiResidenza varchar(50),
annoPatente integer
)
create table automobili (
targa char(7) not null
primary key,
modello varchar(50),
cilindrata integer,
proprietario char(16)
not null references
Proprietari(codiceFiscale)
)
G. Mecca - Tecnologie di Sviluppo per il Web
13
JDBC >> Concetti Fondamentali >> Un Esempio
Un Esempio
m
Driver
ðè necessario avere a disposizione un driver JDBC
ðpgjdbc2.jar, driver JDBC 2.0 di PgSQL
ðpackage “org.postgresql”
ðdriver di tipo 4
m
Deve essere nel CLASSPATH
ðin .bashrc posso ridefinire il mio CLASSPATH
ð CLASSPATH=$CLASSPATH:”.:/usr/share/jdbc/pgjdbc2.jar”
ð export CLASSPATH
G. Mecca - Tecnologie di Sviluppo per il Web
14
7
19/05/2003
JDBC >> Concetti Fondamentali >> Un Esempio
Un Esempio
m
Le classi fondamentali di JDBC
ðClasse Driver Manager
ðInterfaccia Driver
ðInterfaccia Connection
ðInterfaccia Statement
ðInterfaccia PreparedStatement
ðInterfaccia ResultSet
ðEccezione SQLException
G. Mecca - Tecnologie di Sviluppo per il Web
15
JDBC >> Concetti Fondamentali >> Un Esempio
Un Esempio
m
Nel seguito descriveremo le seguenti
operazioni
ðOperazione n.1: Caricare il driver
ðOperazione n.2: Aprire una connessione
ðOperazione n.3: Definire l’istruzione SQL
ðOperazione n.4: Gestire il risultato
ðOperazione n.5: Usare istruzioni preparate
G. Mecca - Tecnologie di Sviluppo per il Web
16
8
19/05/2003
JDBC >> Concetti Fondamentali >> Un Esempio
Operazione n.1: Caricare il Driver
m
Importare il pacchetto java.sql
ðimport java.sql.*;
m
Creare un oggetto della classe Driver
ðDriver d = new org.postgresql.Driver();
m
Registrare il driver sul DriverManager
ðvoid DriverManager.registerDriver(Driver d);
m
A questo punto ho disponibile il driver
G. Mecca - Tecnologie di Sviluppo per il Web
17
JDBC >> Concetti Fondamentali >> Un Esempio
Operazione n.2: Connessione
m
Ottenere una conn. dal DriverManager
ðper farlo è necessario specificare a quale
server, dbms e base di dati
ðquale utente e quale password
m
URI della connessione
ðspecifica server, porta e base di dati
m
Sintassi
ðjdbc:<sottoprotocollo>:<parametri>
G. Mecca - Tecnologie di Sviluppo per il Web
18
9
19/05/2003
JDBC >> Concetti Fondamentali >> Un Esempio
Operazione n.2: Connessione
m
URI per PostgreSQL
ðjdbc:postgresql:<baseDati>
ðjdbc:postgresql://<host>/<baseDati>
ðjdbc:postgresql://<host>:<porta>/<baseDati>
m
Esempi
ðjdbc:postgresql:universita
ðjdbc:postgresql://127.0.0.1/universita
ðjdbc:postgresql://127.0.0.1:5432/universita
G. Mecca - Tecnologie di Sviluppo per il Web
19
JDBC >> Concetti Fondamentali >> Un Esempio
Operazione n.2: Connessione
m
Creazione della connessione
ðConnection DriverManager.getConnection(
String uri, String utente, String password);
m
Esempio
ðconn = DriverManager.getConnection(
“jdbc:postgresql:universita”, “pguser”, “pguser”);
m
Attenzione: è un’operazione costosa
ðsarebbe opportuno limitare il numero di
connessioni create
ðnell’esempio: una connessione per ogni op.
G. Mecca - Tecnologie di Sviluppo per il Web
20
10
19/05/2003
JDBC >> Concetti Fondamentali >> Un Esempio
Nell’Esempio
m
La classe DataSource
ðle connessioni vengono ottenute da una
classe DataSource
ðil suo compito è servire connessioni alle altre
classi che ne hanno bisogno
ðmetodo statico DataSource.getConnection()
che restituisce una nuova connessione ad
ogni richiesta
G. Mecca - Tecnologie di Sviluppo per il Web
21
JDBC >> Concetti Fondamentali >> Un Esempio
La Classe DataSource
package it.unibas.acibase;
import java.sql.*;
public class DataSource {
private static String databaseURI = "jdbc:odbc:automobili";
private static String userName = "";
private static String password = "";
public static Connection getConnection() throws SQLException {
Driver driver = new sun.jdbc.odbc.JdbcOdbcDriver();
DriverManager.registerDriver(driver);
Connection connection = DriverManager.getConnection(databaseURI,
userName, password);
return connection;
}
}
G. Mecca - Tecnologie di Sviluppo per il Web
22
11
19/05/2003
JDBC >> Concetti Fondamentali >> Un Esempio
Operazione n.3: Istruzione SQL
m
Oggetto della classe Statement
ðmetodo createStatement di Connection
ðStatement createStatement();
ðes: Statement st = conn.createStatement();
m
Metodi per l’esecuzione dell’istruzione
ðint executeUpdate(String sql);
ðResultSet executeQuery(String sql);
ðl’istruzione SQL è una stringa che può
essere costruita dinamicamente
G. Mecca - Tecnologie di Sviluppo per il Web
23
JDBC >> Concetti Fondamentali >> Un Esempio
Nell’Esempio
m
Due componenti fondamentali
ðclasse Proprietario
ðclasse Automobile
m
Entrambi sono persistenti
ðoperazioni CRUD (“Create, Retrieve, Update
e Delete”)
ðInserisci, Ricerca, Aggiorna, Cancella
ðper ogni operazione una o più query SQL
G. Mecca - Tecnologie di Sviluppo per il Web
24
12
19/05/2003
JDBC >> Concetti Fondamentali >> Un Esempio
Nell’Esempio
// Proprietario.java
private
private
private
private
String codiceFiscale;
String nome;
String cittaDiResidenza;
int annoPatente;
public void inserisci() throws SQLException {
Connection connection = DataSource.getConnection();
Statement statement = connection.createStatement();
String query = "insert into proprietari values ('" +
codiceFiscale + "','" + nome + "','" +
cittaDiResidenza + "',"+ annoPatente +")";
statement.executeUpdate(query);
statement.close();
connection.close();
}
G. Mecca - Tecnologie di Sviluppo per il Web
25
JDBC >> Concetti Fondamentali >> Un Esempio
Nell’Esempio
// Proprietario.java
public void aggiorna() throws SQLException {
Connection connection = DataSource.getConnection();
Statement statement = connection.createStatement();
String query = "update proprietari set “ +
“codiceFiscale = '" + codiceFiscale + "'," +
"nome = '" + nome + "'," +
"cittaDiResidenza = '" + cittaDiResidenza + "'," +
"annoPatente = " + annoPatente + " " +
"where codiceFiscale = '" + codiceFiscale + "'";
statement.executeUpdate(query);
statement.close();
connection.close();
}
G. Mecca - Tecnologie di Sviluppo per il Web
26
13
19/05/2003
JDBC >> Concetti Fondamentali >> Un Esempio
Operazione n.4: Gestire il Risultato
m
Oggetto della classe ResultSet
ðrappresenta la collezione di ennuple restituita
da una SELECT
ðmetodo boolean next(); per scorrere le
ennuple (sostituisce il cursore)
ðmetodi getXXX(String attributo) per acquisire
i valori degli attributi
ðesempio: int getInt(String attributo);
ðesempio: String getString(String attributo);
G. Mecca - Tecnologie di Sviluppo per il Web
27
JDBC >> Concetti Fondamentali >> Un Esempio
Nell’Esempio
m
Ricerca di un proprietario per nome
ðviene eseguita una SELECT con la
condizione che il nome sia quello cercato
ðviene restituito un ResultSet
ðil ResultSet viene scandito con il metodo
next()
ðvengono prelevate le informazioni sui
proprietari da ciascuna ennupla con
getString() e getInt()
G. Mecca - Tecnologie di Sviluppo per il Web
28
14
19/05/2003
JDBC >> Concetti Fondamentali >> Un Esempio
Nell’Esempio
public static List ricercaPropPerNome(String nome)
throws SQLException{
Connection connection = DataSource.getConnection();
List listaProprietari = new LinkedList();
Statement statement = connection.createStatement();
String query = "select * from proprietari where nome = '" +
nome + "'";
ResultSet rs = statement.executeQuery(query);
while (rs.next()){
Proprietario p = new Proprietario();
p.setCodiceFiscale(rs.getString("codiceFiscale"));
p.setNome(rs.getString("nome"));
p.setCittaDiResidenza(rs.getString("cittaDiResidenza"));
p.setAnnoPatente(rs.getInt("annoPatente"));
listaProprietari.add(proprietario);
}
statement.close();
connection.close();
return listaProprietari;
}
G. Mecca - Tecnologie di Sviluppo per il Web
29
JDBC >> Sommario
Concetti Fondamentali
m
Introduzione
ðArchitettura
ðTipi di driver
m
Un Esempio
ðDriver e Driver Manager
ðConnection e URI
ðStatement e Result Set
G. Mecca - Tecnologie di Sviluppo per il Web
30
15
19/05/2003
JDBC >> Concetti Fondamentali >> Un Esempio
Un Esempio
m
La base di dati
create table utenti (
nomeUtente char(10)
not null primary key,
nome varchar(50),
password varchar(10),
ruolo varchar(50)
)
create table proprietari (
codiceFiscale char(16)
not null primary key,
nome varchar(50) not null,
cittaDiResidenza varchar(50),
annoPatente integer
)
create table automobili (
targa char(7) not null
primary key,
modello varchar(50),
cilindrata integer,
proprietario char(16)
not null references
Proprietari(codiceFiscale)
)
G. Mecca - Tecnologie di Sviluppo per il Web
31
16
Scarica