Last Updated on 2 anni | Published: 22/05/2024
Java Database Connection - JDBC
Il mondo della programmazione è vasto e diversificato, e uno degli aspetti più cruciali nello sviluppo di applicazioni è la gestione dei dati. Per le applicazioni Java, uno degli strumenti più potenti e versatili per interagire con i database è JDBC (Java Database Connectivity). Questo articolo esplorerà cos’è JDBC, come funziona, e perché è una componente fondamentale per gli sviluppatori Java.
JDBC è una API (Application Programming Interface) fornita da Java che consente ai programmatori di Java di interagire con database relazionali in modo semplice e standardizzato. Introduce un’interfaccia uniforme per accedere a diversi database, permettendo agli sviluppatori di eseguire operazioni come query, aggiornamenti, e gestione delle transazioni senza dover conoscere i dettagli specifici di ogni database.
Come funziona il JDBC
L’architettura di JDBC è composta da diversi elementi chiave:
- Driver Manager: È responsabile del caricamento dei driver appropriati e della gestione delle connessioni al database.
- Driver: Fornisce l’interfaccia per comunicare con il database. Ogni tipo di database (come MySQL, PostgreSQL, Oracle) ha il proprio driver JDBC.
- Connection: Rappresenta una connessione al database. Attraverso questa connessione, l’applicazione può inviare comandi SQL.
- Statement: Utilizzato per eseguire le query SQL. Ci sono tre tipi principali di oggetti Statement:
Statement: Per eseguire istruzioni SQL semplici senza parametri.PreparedStatement: Per eseguire istruzioni SQL con parametri, ottimizzando l’esecuzione di query ripetute.CallableStatement: Per eseguire le stored procedure nel database.
- ResultSet: Contiene i dati restituiti da una query SQL. Permette di navigare attraverso i risultati e accedere ai dati.
In questo articolo gli esempi sono stati realizzati con progetti JavaSE (Standard Edition), quindi attraverso le Properties bisogna caricare il connettore ( il file .jar compatibile con la versione del Server MySql) nel classpath (Java Build Path)
Creare una Connessione JDBC
Class.forName è un metodo statico della classe Class in Java. Viene utilizzato per caricare una classe in modo dinamico durante l’esecuzione del programma. Nel contesto di JDBC, questo metodo è spesso utilizzato per caricare il driver JDBC del database.
La classe DriveManager gestisce un elenco di driver di database. Essa fornisce una connessione al database utilizzando i driver registrati.
Il metodo getConnection di DriverManager è utilizzato per stabilire una connessione al database. Ci sono diverse varianti di questo metodo, ma quelle più comuni richiedono l’URL del database e, opzionalmente, il nome utente e la password.
Statement e ResultSet
La classe Statement è un’interfaccia in Java SQL che rappresenta un’istruzione SQL. Viene utilizzata per inviare comandi SQL al database, come query di selezione (SELECT), inserimento (INSERT), aggiornamento (UPDATE) e cancellazione (DELETE). Gli oggetti Statement sono creati da un oggetto Connection.
I metodi principali della classe Statement sono i seguenti:
executeQuery(String sql): Esegue una query SQL che restituisce un insieme di risultati, tipicamente una querySELECT. Ritorna un oggettoResultSet.executeUpdate(String sql): Esegue un’istruzione SQL che modifica il database, comeINSERT,UPDATEoDELETE. Ritorna un numero intero che indica il numero di righe interessate.execute(String sql): Esegue un’istruzione SQL che potrebbe essere qualsiasi comando SQL. Ritorna un booleano che indica se il risultato è unResultSet.close(): Chiude loStatemente libera le risorse.
La classe ResultSet rappresenta un insieme di risultati restituiti da una query SQL. Contiene i dati recuperati dal database e permette di iterare su di essi riga per riga. Gli oggetti ResultSet sono generati dall’esecuzione di query SQL tramite un oggetto Statement.
I Metodi principali della classe ResultSet sono i seguenti:
next(): Sposta il cursore alla riga successiva nelResultSet. Ritornatruese ci sono altre righe,falsese non ci sono più righe.getInt(String columnLabel): Recupera il valore di una colonna come un intero, dato il nome della colonna.getString(String columnLabel): Recupera il valore di una colonna come una stringa, dato il nome della colonna.close(): Chiude ilResultSete libera le risorse.
Mostriamo un esempio in merito all’ utilizzo della classe Statement e ResultSet:
Possiamo notare che la classe CrudStudenti estente la classe Connessioni (Fig-1) per recuperare il metodo DammiScuolaEsami(), in questo modo tutti i metodi della classe possono e devono utilizzare la connessione.
PreparedStatement
La classe PreparedStatement è un’interfaccia in Java SQL che estende l’interfaccia Statement. Viene utilizzata per eseguire query SQL con parametri, migliorando la sicurezza e l’efficienza rispetto all’uso di semplici Statement e rappresenta una query SQL precompilata che può essere eseguita più volte con parametri diversi. È più sicura e performante rispetto a Statement perché:
- Protegge contro SQL Injection: I parametri sono trattati come dati, non come parte del codice SQL, prevenendo attacchi di SQL Injection.
- Efficienza: La query viene compilata una volta dal database e può essere eseguita più volte con parametri diversi senza la necessità di ricompilare la query.
I metodi principale di PreparedStatement sono:
setInt(int parameterIndex, int value): Imposta un parametro di tipoint.setString(int parameterIndex, String value): Imposta un parametro di tipoString.setDouble(int parameterIndex, double value): Imposta un parametro di tipodouble.executeUpdate(): Esegue una query che modifica il database (comeINSERT,UPDATEoDELETE).executeQuery(): Esegue una querySELECTe restituisce unResultSet.close(): Chiude ilPreparedStatemente libera le risorse.
Mostriamo un esempio in merito utilizzando una query di INSERT, vediamo:
