19
PROVA FINALE Ingegneria del software Ing. Jody Marca [email protected] Laboratorio N° 4

PROVA FINALE Ingegneria del software - Politecnico di Milano · Invia comandi SQL Processa il risultato dei comandi inviati 3 ... Step dell’utilizzo di JDBC Come si usa: Import

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: PROVA FINALE Ingegneria del software - Politecnico di Milano · Invia comandi SQL Processa il risultato dei comandi inviati 3 ... Step dell’utilizzo di JDBC Come si usa: Import

PROVA FINALE – Ingegneria del software Ing. Jody Marca – [email protected]

Laboratorio N° 4

Page 2: PROVA FINALE Ingegneria del software - Politecnico di Milano · Invia comandi SQL Processa il risultato dei comandi inviati 3 ... Step dell’utilizzo di JDBC Come si usa: Import

© 2015 – Jody Marca – Laboratorio numero 4

Cos’è JDBC

JDBC significa Java Database Connectivity

Standard definito da Sun MicroSystems per connettere

programmi Java ai database relazionali

E' costituito da un insieme di classi e interfacce scritte

in Pure Java

Si basa sul concetto di driver di database

Il driver è una implementazione JDBC specifica per

database

Permette ai diversi fornitori di database di estendere lo

standard con i loro specifici driver JDBC (Derby,

PostgreSQL, Oracle, MySQL, MS SQL Server …)

2

Page 3: PROVA FINALE Ingegneria del software - Politecnico di Milano · Invia comandi SQL Processa il risultato dei comandi inviati 3 ... Step dell’utilizzo di JDBC Come si usa: Import

© 2015 – Jody Marca – Laboratorio numero 4

Cosa fa JDBC

Le principali funzionalità di JDBC sono:

Stabilisce una connessione con il database

Invia comandi SQL

Processa il risultato dei comandi inviati

3

Page 4: PROVA FINALE Ingegneria del software - Politecnico di Milano · Invia comandi SQL Processa il risultato dei comandi inviati 3 ... Step dell’utilizzo di JDBC Come si usa: Import

© 2015 – Jody Marca – Laboratorio numero 4

Step dell’utilizzo di JDBC

Come si usa:

Import del package java.sql.*

Registrazione del driver del database da utilizzare

Apertura connessione

Creazione oggetto Statement

Esecuzioni di Create, Drop, Delete, Insert e Update

Esecuzione di Select e recupero dati dal ResultSet

Utilizzo ResultSet

Chiusura risorse ResultSet e Statement

Chiusura connessione

4

Page 5: PROVA FINALE Ingegneria del software - Politecnico di Milano · Invia comandi SQL Processa il risultato dei comandi inviati 3 ... Step dell’utilizzo di JDBC Come si usa: Import

© 2015 – Jody Marca – Laboratorio numero 4

Registrazione del driver

Per utilizzare un driver di database un'applicazione lo

deve rendere disponibile applicazione (si chiama

registrazione del driver)

Questa operazione deve essere fatta prima di creare la

prima connessione al database

Class.forName(DRIVER).newInstance()

La stringa DRIVER è database dependent

Es. Derby org.apache.derby.jdbc.EmbeddedDriver

Postgres org.postgresql.Driver

5

Page 6: PROVA FINALE Ingegneria del software - Politecnico di Milano · Invia comandi SQL Processa il risultato dei comandi inviati 3 ... Step dell’utilizzo di JDBC Come si usa: Import

© 2015 – Jody Marca – Laboratorio numero 4

Connessione

Per creare una connessione si utilizza il metodo

getConnection(String url, String user, String pass)

della classe java.sql.DriverManager

Tutti i metodi di JDBC lanciano l'eccezione

java.sql.SQLException

Una connessione rappresenta una sessione con uno

specifico db; possono quindi gestire più connessioni

contemporanee con uno o più db

E' possibile:

ottenere informazioni sulla struttura del db (metadata)

gestire le transazioni

6

Page 7: PROVA FINALE Ingegneria del software - Politecnico di Milano · Invia comandi SQL Processa il risultato dei comandi inviati 3 ... Step dell’utilizzo di JDBC Come si usa: Import

© 2015 – Jody Marca – Laboratorio numero 4

Url del JDBC

Per effettuare la connessione è necessario “costruire” URL

da utilizzare nel metodo getConnection:

La URL contiene varie informazioni

indirizzo (e porta) dove risiede il database

nome dell'istanza del database

Es: jdbc:postgresql://[host]:[porta]/[dbname]

jdbc:derby:[PathAlDatabase]

//Carico il driver – solo

Class.forName(DRIVER).newInstance();

//Apro la connessione

Connection conn = DriverManager.getConnection(URL, USER, PASS);

7

Page 8: PROVA FINALE Ingegneria del software - Politecnico di Milano · Invia comandi SQL Processa il risultato dei comandi inviati 3 ... Step dell’utilizzo di JDBC Come si usa: Import

© 2015 – Jody Marca – Laboratorio numero 4

Ricapitoliamo … 8

DriverManager

getConnection( url, user,

passwd) : Connection

<<interface>> Connection

createStatement(): Statement

close( )

isClosed( ): boolean

getCatalog( ): String

PostgreSQLConnection

crea

DerbyConnection

Page 9: PROVA FINALE Ingegneria del software - Politecnico di Milano · Invia comandi SQL Processa il risultato dei comandi inviati 3 ... Step dell’utilizzo di JDBC Come si usa: Import

© 2015 – Jody Marca – Laboratorio numero 4

L’interfaccica Statment

Per eseguire delle query è necessario creare un’instanza

Statement: Statement st = connessione.createStatement()

Lo Statement offre metodi indipendenti dal DB per

eseguire le diverse tipologie di query SQL:

ResultSet executeQuery(String sql)

interrogazione SQL con risultato

int executeUpdate(String sql)

interrogazione senza risultato (creazione tabelle, aggiornamento

tabelle, ...), restituisce il numero di tuple coinvolte nell’operazione

boolean execute(String sql)

invocazione procedure che restituiscono risultati multipli, o stringhe

SQL sconosciute

9

Page 10: PROVA FINALE Ingegneria del software - Politecnico di Milano · Invia comandi SQL Processa il risultato dei comandi inviati 3 ... Step dell’utilizzo di JDBC Come si usa: Import

© 2015 – Jody Marca – Laboratorio numero 4

L’interfaccica Resulset

È ottenuta come parametro di ritorno del metodo

executeQuery in una query di selezione

Un ResultSet fornisce l'accesso ai dati di una tabella

generati eseguendo uno Statement

Ogni Statement gestisce un solo ResultSet alla volta

Il risultato (della query) è rappresentato come

enumerazione di tuple con cursore di scorrimento delle

tuple

Si possono ottenere i dati utilizzando i get dei datatype

SQL definiti in Java

10

Page 11: PROVA FINALE Ingegneria del software - Politecnico di Milano · Invia comandi SQL Processa il risultato dei comandi inviati 3 ... Step dell’utilizzo di JDBC Come si usa: Import

© 2015 – Jody Marca – Laboratorio numero 4

Recupero dei dati dal Resulset

I tipi di dati sono identificati da costanti intere della

classe java.sql.Types

L’interfaccia ResultSet offre metodi getXXX() per ottenere i valori di campi di tipi diversi. I metodi effettuano il mapping da tipi JDBC a tipi java:

getString(String columnName), getString(int colNumber)

getDate(String columnName), getDate(int colNumber)

getInt(String columnName), getInt(int colNumber)

getURL(String columnName), getURL(int colNumber)

getObject(String columnName), getObject(int colNumber)

Attenzione le colonne sono numerate a partire da 1

11

Page 12: PROVA FINALE Ingegneria del software - Politecnico di Milano · Invia comandi SQL Processa il risultato dei comandi inviati 3 ... Step dell’utilizzo di JDBC Come si usa: Import

© 2015 – Jody Marca – Laboratorio numero 4

Mapping dei principali DataType SQL <-> Java 12

JDBC DataType Utilizzo SQL DataType Java DataType

DATALINK Rappresenta SQL DATALINK DATALINK java.net.URL

DATE Data strutturata come giorno,

mese ed anno

DATE java.sql.Date

VARCHAR Stringa di lunghezza variabile VARCHAR String

INTEGER interi a 32-bit con segno INTEGER int

NULL Rappresenta NULL values NULL null per oggetti java, 0 per

numeri, false per boolean

JAVA_OBJECT Memorizzare oggetti Java Tipi definiti

dall’utente (solo

negli ORDBMS)

Object

DOUBLE floating-point, doppia

precisione con mantissa a 15 bit

DOUBLE

PRECISION

double

Page 13: PROVA FINALE Ingegneria del software - Politecnico di Milano · Invia comandi SQL Processa il risultato dei comandi inviati 3 ... Step dell’utilizzo di JDBC Come si usa: Import

© 2015 – Jody Marca – Laboratorio numero 4

Esempio

String DRIVER = "org.apache.derby.jdbc.EmbeddedDriver";

String URL = "jdbc:derby:databasedir", USER = "user", PASS = "pass" ;

Class.forName(DRIVER).newInstance();

Connection connessione = DriverManager.getConnection(URL, USER, PASS);

//Creo lo statement

Statement st = connessione.createStatement();

//Eseguo una query di update

st.executeUpdate("UPDATE tabella SET numero = 0 WHERE stringa = 'prova' ");

//Eseguo una query di select

ResultSet rs = st.executeQuery("SELECT stringa, numero FROM tabella ");

//Scandisco il risultato

while(rs.next()){

String stringaLetta = rs.getString(1);

Integer interoLetta = rs.getInt(“numero”);

}

13

Page 14: PROVA FINALE Ingegneria del software - Politecnico di Milano · Invia comandi SQL Processa il risultato dei comandi inviati 3 ... Step dell’utilizzo di JDBC Come si usa: Import

© 2015 – Jody Marca – Laboratorio numero 4

Metadati

Da ogni Resulset è possibile recuperare l’interfaccia

ResulSetMetadata per ispezionare i metadati

ResultSetMetaData metaData = resulset.getMetaData();

I metodi di ispezione dei metadati del risultato sono:

String getCatalogName()

String getTableName()

int getColumnCount()

String getColumnName()

int getColumnType(), …………

14

Page 15: PROVA FINALE Ingegneria del software - Politecnico di Milano · Invia comandi SQL Processa il risultato dei comandi inviati 3 ... Step dell’utilizzo di JDBC Come si usa: Import

© 2015 – Jody Marca – Laboratorio numero 4

Chiusura delle risorse

Le connessioni sono risorse preziose per cui vanno

rilasciate appena possibile

Lo stesso vale per Statement e ResultSet

La chiusura avviene utilizzando il metodo close()

Connection.close()

Statement.close();

ResultSet.close();

Una connessione aperta e inutilizzata spreca risorse

15

Page 16: PROVA FINALE Ingegneria del software - Politecnico di Milano · Invia comandi SQL Processa il risultato dei comandi inviati 3 ... Step dell’utilizzo di JDBC Come si usa: Import

© 2015 – Jody Marca – Laboratorio numero 4

Esempio

Class.forName(DRIVER).newInstance();

Connection connessione = DriverManager.getConnection(URL, USER, PASS);

Statement st = connessione.createStatement();

st.executeUpdate(“UPDATE tabella SET numero = 0 WHERE stringa = ‘prova’ ”);

ResultSet rs = st.executeQuery(“SELECT stringa, numero FROM tabella”);

while(rs.next()){

String stringaLetta = rs.getString(1);

Integer interoLetta = rs.getInt(“numero”);

}

//Chiudo Resulset, Statement e Connection

rs.close();

st.close();

connessione.close();

16

Page 17: PROVA FINALE Ingegneria del software - Politecnico di Milano · Invia comandi SQL Processa il risultato dei comandi inviati 3 ... Step dell’utilizzo di JDBC Come si usa: Import

© 2015 – Jody Marca – Laboratorio numero 4

PreparedStatement

Sono statement parametrizzati utili quando

a tempo di compilazione non si hanno info necessarie

per specificare completamente la query

si vuole compilare uno statement una sola volta, e poi

eseguirlo più volte sostituendo i valori dei parametri al

momento della esecuzione (sostituire parametri in più

invocazioni dello stesso statement)

Es: SELECT <select_fields> FROM <table_name> WHERE

USER_ID = ? (il punto di domanda viene sostituito a

runtime con il valore)

17

Page 18: PROVA FINALE Ingegneria del software - Politecnico di Milano · Invia comandi SQL Processa il risultato dei comandi inviati 3 ... Step dell’utilizzo di JDBC Come si usa: Import

© 2015 – Jody Marca – Laboratorio numero 4

PreparedStatement / 2

Sono istanziati dal metodo prepareStatement(String sql)

della classe Connection

PreparedStatement offre I metodi

ResultSet executeQuery(String sql)

int executeUpdate(String sql)

boolean execute(String sql)

setString(int i, String s)

assegna all’i-mo parametro unbound la stringa s

setDate(int parNumber, java.sql.Date date)

assegna all’i-mo parametro unbound la data date

….. Un metodo set per ogni tipo di dato JDBC …….

18

Page 19: PROVA FINALE Ingegneria del software - Politecnico di Milano · Invia comandi SQL Processa il risultato dei comandi inviati 3 ... Step dell’utilizzo di JDBC Come si usa: Import

© 2015 – Jody Marca – Laboratorio numero 4

Esercizio

Creiamo un programma che si connette ad un db e

effettua query di INSERT,SELECT e UPDATE

Come database utilizzeremo Apache Derby in modalità

Embedded. http://db.apache.org/derby

Driver: "org.apache.derby.jdbc.EmbeddedDriver"

URL di connessione: "jdbc:derby:[PathAlDatabase]"

Interprete SQL consigliato per la manipolazione del

database: SQuirreL SQL. http://www.squirrelsql.org/