Anteprima
Vedrai una selezione di 6 pagine su 22
Programmazione a oggetti Pag. 1 Programmazione a oggetti Pag. 2
Anteprima di 6 pagg. su 22.
Scarica il documento per vederlo tutto.
Programmazione a oggetti Pag. 6
Anteprima di 6 pagg. su 22.
Scarica il documento per vederlo tutto.
Programmazione a oggetti Pag. 11
Anteprima di 6 pagg. su 22.
Scarica il documento per vederlo tutto.
Programmazione a oggetti Pag. 16
Anteprima di 6 pagg. su 22.
Scarica il documento per vederlo tutto.
Programmazione a oggetti Pag. 21
1 su 22
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

API

java.sql: questo pacchetto contiene tutte le classi principali necessarie per l'accesso al database,

è essenziale per qualsiasi applicazione Java che necessita di interagire con un database. Le classi

Programmazione a oggetti 15

principali in questo pacchetto includono , , , , e altre

Connection Statement ResultSet PreparedStatement

classi utilizzate per eseguire query SQL e manipolare i dati nel database.

javax.sql: aggiunge funzionalità opzionali all'API JDBC, specialmente utili per le applicazioni

enterprise.

Architettura

JDBC API: è un'API basata esclusivamente su Java che fornisce un insieme di classi e interfacce per

interagire con i database. Questa parte non dipende dal database specifico che si sta utilizzando.

JDBC Driver Manager: questo gestore comunica con i driver specifici del fornitore che effettuano la

vera comunicazione con il database. I driver JDBC agiscono come traduttori, convertendo le chiamate

dell'API JDBC nel formato specifico richiesto dal database. Questa traduzione avviene sul client, il che

significa che non sono necessarie modifiche al server del database. Tuttavia, è necessario avere

installato il driver appropriato sul client per garantire la corretta comunicazione con il database.

Drivers

ODBC (Open Database Connectivity) inserisce uno strato intermedio, chiamato driver del database,

tra un'applicazione e il DBMS. Questo strato ha il compito di tradurre le query di dati dell'applicazione

in comandi comprensibili per il DBMS. Affinché ciò funzioni, sia l'applicazione che il DBMS devono

essere conformi a ODBC, il che significa che l'applicazione deve essere in grado di emettere comandi

ODBC e il DBMS deve essere in grado di rispondere ad essi.

Esistono quattro tipi di driver:

Type I (JDBC-ODBC Bridge Driver): Questo driver agisce come un ponte tra JDBC e ODBC,

utilizzando un driver ODBC per comunicare con il database sottostante. Sebbene consenta una

connessione tra applicazioni Java e database che supportano ODBC, è considerato inefficiente e

limitato. La presenza di molteplici livelli di traduzione introduce latenza e complessità, rendendolo

una scelta poco adatta per applicazioni ad alte prestazioni.

Type II (Native-API Driver): Il driver Type II interagisce direttamente con le API native del database,

bypassando l'ODBC. Questo approccio migliora l'efficienza rispetto al Type I, poiché riduce i livelli

di traduzione. Tuttavia, questo tipo di driver è strettamente legato all'esistenza di API native

specifiche per ogni database, rendendolo meno portabile. L'utilizzo di driver Type II implica spesso

una maggiore complessità di configurazione e una dipendenza da librerie native specifiche del

sistema operativo.

Type III (Network Protocol Driver): Il driver Type III introduce un componente middleware in

esecuzione su un server remoto. Questo middleware gestisce le richieste del database utilizzando

un protocollo di rete (Net protocol) indipendente dal database stesso. Questo approccio consente

una maggiore flessibilità e indipendenza dalla piattaforma, poiché il middleware può essere

ottimizzato per vari database. Tuttavia, la necessità di un server middleware aggiunge un livello di

complessità e potenziali punti di fallimento nell'infrastruttura.

Type IV (Thin Driver): Il driver Type IV, completamente scritto in Java, comunica direttamente con

il database utilizzando il protocollo nativo del database. È il driver più efficiente poiché elimina la

necessità di ulteriori livelli di traduzione, passando le richieste direttamente al database. Inoltre, la

sua implementazione interamente in Java lo rende altamente portabile e facile da distribuire, senza

Programmazione a oggetti 16

la necessità di librerie esterne o middleware. Questa combinazione di efficienza e semplicità di

distribuzione lo rende la scelta preferita per molte applicazioni moderne.

Utilizzando la proprietà di sistema , è possibile configurare dinamicamente l'elenco dei

jdbc.drivers

driver JDBC che l'applicazione deve utilizzare, semplificando il processo di gestione dei driver JDBC e

consentendo una maggiore flessibilità nell'applicazione.

Connessione al Database - Componenti

1. Driver Manager: si occupa del caricamento dei driver del database e della gestione delle

connessioni tra l'applicazione e il driver. È responsabile di inizializzare il driver appropriato per il

database desiderato e stabilire la connessione ad esso.

2. Driver: il driver traduce le chiamate dell'API JDBC in operazioni specifiche per il database. Funge

da ponte tra l'applicazione e il database, consentendo all'applicazione di inviare comandi SQL al

database e di ricevere i risultati.

3. Connection: rappresenta una sessione attiva tra l'applicazione e il database. Una volta stabilita,

consente all'applicazione di eseguire query, aggiornamenti e altre operazioni sul database.

4. Statement: è un'istruzione SQL utilizzata per eseguire query o aggiornamenti sul database.

5. Metadata: fornisce informazioni sull'insieme dei dati restituito da una query, sul database stesso e

sul driver JDBC utilizzato. Include dettagli come i nomi delle colonne, i tipi di dati e altre

informazioni utili sull'ambiente del database.

6. Result Set: È un insieme logico di colonne e righe di dati restituite dall'esecuzione di un'istruzione

SQL, come una query di selezione. Consente all'applicazione di iterare attraverso i risultati e

recuperare le informazioni desiderate dalle righe restituite dal database.

Step da seguire

Importare le classi necessarie.

Caricare il driver JDBC.

Identificare la fonte dati (definire l'URL di connessione).

Stabilire la connessione.

Creare un oggetto Statement.

Eseguire la stringa di query utilizzando l'oggetto Statement.

Recuperare i dati dal ResultSet restituito.

Chiudere ResultSet, Statement e oggetto Connection nell'ordine corretto.

Prima di comunicare con un database utilizzando JDBC, è necessario caricare il driver JDBC

corrispondente. Ci sono diversi modi per farlo:

1. Caricamento dinamico: Puoi caricare dinamicamente il driver utilizzando il metodo

. Questo approccio è comune quando il nome del driver è noto a

Class.forName(String drivername)

tempo di esecuzione.

Programmazione a oggetti 17

2. Caricamento automatico: Il sistema può caricare automaticamente il driver JDBC utilizzando la

proprietà di sistema . Questo è utile quando si desidera configurare il caricamento del

jdbc.drivers

driver in modo automatico, senza doverlo specificare esplicitamente nel codice.

Indipendentemente dal metodo utilizzato per il caricamento, è importante notare che un'istanza del

driver deve essere registrata con la classe . Questo può avvenire in due modi:

DriverManager

Registro esplicito: Ogni classe Driver creerà tipicamente un'istanza di se stessa e la registrerà con

il DriverManager. Questo può essere fatto chiamando esplicitamente il metodo registerDriver(Driver)

della classe DriverManager.

Registro automatico: Alcuni driver possono registrarsi automaticamente chiamando il metodo

della classe DriverManager all'interno del loro codice di inizializzazione

registerDriver(Driver)

statica. In questo caso, non è necessario creare un'istanza del driver o registrarla esplicitamente

nel codice.

URL

Le URL JDBC forniscono un modo per identificare un database e sono utilizzate per stabilire la

connessione ad esso:

Protocollo ( ): Il protocollo specifica il metodo di accesso al database. Nelle URL JDBC, il

protocol

protocollo è sempre .

jdbc

Sottoprotocollo ( ): Il sottoprotocollo identifica il driver del database che sarà utilizzato

subprotocol

per comunicare con il database. Ad esempio, per un database MySQL, il sottoprotocollo potrebbe

essere .

mysql

Sottotipo ( ): Il sottotipo è il nome o l'indirizzo del database a cui ci si desidera connettere.

subname

Può includere informazioni aggiuntive come il nome del database, la porta del server e altre

informazioni di connessione. Ad esempio, potrebbe essere un sottotipo per

localhost:3306/database

un database MySQL che si trova sulla stessa macchina locale sulla porta 3306.

Esempi: jdbc:cloudscape:Movies - jdbc:odbc:Movies

Creazione e chiusura connessione

Esistono tre metodi per connettersi al database: ;

public static Connection getConnection(String url) ;

public static Connection getConnection(String url, Properties info) .

public static Connection getConnection(String url, String user, String password)

Dato che una macchina supporta un numero limitato di connessioni (quanti sono i thread) è importante

chiuderle quando non sono più necessarie, per farlo si utilizza .

conn.close()

Statements

Sono oggetti utilizzati per eseguire query SQL sul database. Ecco una spiegazione più dettagliata:

1. Creazione di uno Statement: Per creare un oggetto , devi prima ottenere una connessione

Statement

al database utilizzando l'oggetto . Una volta ottenuta la connessione, puoi creare un

Connection

Programmazione a oggetti 18

nuovo oggetto chiamando il metodo sull'oggetto .

Statement createStatement() Connection

Statement statement = connection.createStatement();

2. Esecuzione di una query SQL: Dopo aver creato lo Statement, puoi utilizzarlo per eseguire una

query SQL sul database. Puoi eseguire query di selezione ( ), aggiornamento ( , ,

SELECT INSERT UPDATE

) o altri comandi SQL.

DELETE

String query = "SELECT * FROM my_table";

ResultSet resultSet = statement.executeQuery(query);

3. Esecuzione di aggiornamenti del database: Se desideri eseguire comandi SQL che modificano i

dati nel database, puoi utilizzare il metodo dello Statement.

executeUpdate()

String updateQuery = "UPDATE my_table SET column1 = value WHERE condition";

int rowsAffected = statement.executeUpdate(updateQuery);

È importante sottolineare che se vogliamo soltanto ottenere i dati dal nostro

database utilizziamo : principalmente utilizzando comandi di tipo

executeQuery()

, restituisce un oggetto che contiene i dati ottenuti dalla query.

Select ResultSet

Se invece vogliamo modificare dati nel database si utilizza : la

executeUpdate()

query SQL deve contenere comandi di tipo , o . Restituisce il

Update Insert Delete

numero di righe influenzate dalle operazioni di aggiornamento.

Poi ancora abbiamo setQueryTimeout che viene utilizzato per specificare un

ritardo massimo da attendere per i risultati delle query. Se il tempo limite viene

superato prima che i risultati siano disponibili, verrà generata un'eccezione di

tipo SQLException.

4. Chiusura dello Statement: Dopo aver utilizzato lo Statement, è importan

Dettagli
Publisher
A.A. 2023-2024
22 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher just_antov di informazioni apprese con la frequenza delle lezioni di Programmazione a oggetti e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Messina o del prof Galletta Antonino.