JDBC – Connessione al Database

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:

  1. Driver Manager: È responsabile del caricamento dei driver appropriati e della gestione delle connessioni al database.
  2. Driver: Fornisce l’interfaccia per comunicare con il database. Ogni tipo di database (come MySQL, PostgreSQL, Oracle) ha il proprio driver JDBC.
  3. Connection: Rappresenta una connessione al database. Attraverso questa connessione, l’applicazione può inviare comandi SQL.
  4. 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.
  5. 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

Fig-1

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 query SELECT. Ritorna un oggetto ResultSet.
  • executeUpdate(String sql): Esegue un’istruzione SQL che modifica il database, come INSERT, UPDATE o DELETE. 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 è un ResultSet.
  • close(): Chiude lo Statement e 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 nel ResultSet. Ritorna true se ci sono altre righe, false se 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 il ResultSet e 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é:

  1. Protegge contro SQL Injection: I parametri sono trattati come dati, non come parte del codice SQL, prevenendo attacchi di SQL Injection.
  2. 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 tipo int.
  • setString(int parameterIndex, String value): Imposta un parametro di tipo String.
  • setDouble(int parameterIndex, double value): Imposta un parametro di tipo double.
  • executeUpdate(): Esegue una query che modifica il database (come INSERT, UPDATE o DELETE).
  • executeQuery(): Esegue una query SELECT e restituisce un ResultSet.
  • close(): Chiude il PreparedStatement e libera le risorse.

Mostriamo un esempio in merito utilizzando una query di INSERT, vediamo:

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *