• JDBC-introduzione

    Introduzione a JDBC

    Articolo introduttivo all’utilizzo dei database in Java con JDBC. Vedremo che cos’è JDBC, la sua storia, il suo utilizzo, le eventuali alternative e come si inserisce nel contesto più ampio del mondo Java.

    Che cos’è JDBC

    JDBC è un’API (Application Programming Interface), cioè un insieme di interfacce e classi, che consentono di utilizzare facilmente praticamente tutti i database relazionali (a cominciare da Oracle, PostgreSQL, SQL Server, MySQL, etc …). Inizialmente JDBC è diventato noto al mondo IT come Java Database Connectivity, ma da qualche anno ormai lo si identifica semplicemente con l’acronimo JDBC.

    Java-JDBC

    Rispetto a diverse alternative, l’utilizzo di JDBC consente di utilizzare diversi database senza per questo essere costretti a modificare il codice dell’applicazione. Oltre all’indipendenza dalla piattaforma tipica di Java, si ottiene anche l’indipendenza dal DBMS. E questo vantaggio diventa determinante in ottica di migrazione da un database ad un altro all’interno di un’applicazione.

    Tutti i fornitori di DBMS forniscono la propria interfaccia ai propri database, lasciando ai programmatori il compito di implementare il codice specifico per i database a cui l’applicazione deve connettersi. JDBC fornisce uno strato di astrazione software tra un’applicazione scritta in Java e un database, fornendo un’API al programmatore che nasconde le specificità del database per quello che è possibile. L’utilizzo di JDBC su diversi database è possibile se i DBMS supportano l’ANSI SQL 2 del 1999.

    L’evoluzione di JDBC nel tempo

    JDBC è stato inserito in Java nel 1997 con il JDK1.1, e da allora ha fatto parte di tutte le edizioni di Java Standard Edition, con funzioni aggiuntive e prestazioni sempre migliori. La versione originale del 1997 comprendeva le principali classi e interfacce che si usano tutt’ora, come l’interfaccia Connection (che consente di stabilire il collegamento a un database), l’interfaccia Statement (che racchiude il codice SQL), e l’interfaccia ResultSet (che restituisce i dati dal database).

    Versione JDBCNuove funzionalità
    1.0Classi e interfacce principali: Connection, Statement, ResultSet
    1.2Supporta ResultSet aggiornabili, migliori performance, codice di DatabaseMetaData più trasparente
    2.0Interfaccia DataSource (con JNDI), gestione dei pool di connessioni
    2.1Possibilità di scorrere un ResultSet avanti e indietro, istruzioni batch SQL, aggiunti data type BLOB, CLOB, ARRAY ...
    3.0Riusabilità dei PreparedStatement dai connection pool, nuovo data type BOOLEAN, passaggio parametri a CallableStatement
    4.0Caricamento driver automatico, supporto per RowID, miglioramento della gestione delle eccezioni
    4.1Costrutto try-with-resources, miglioramento alle API RowSet
    4.2Supporto a REF_CURSOR, aggiunte interfacce DriverAction e SQLType

    Le versioni successive di JDBC hanno migliorato le funzionalità dell’API, tra cui la possibilità di aggiornare i dati senza SQL, hanno migliorano le prestazioni, velocizzato le connessioni, hanno gestito lo scorrimento del ResultSet, hanno gestito più tipi di dati, la capacità di lavorare con le stored procedure, la capacità di recuperare i metadati, etc … Con JDBC 4.0 (rilasciato con il JDK 1.6) è stata fornita la possibilità di caricare automaticamente i driver, senza dover quindi invocare il metodo Class.forName(). Con JDBC 4.1 (rilasciato con il JDK 1.7) sono state introdotte funzionalità che consentono di ridurre la quantità di codice necessario per lavorare con i database. Infine, con JDBC 4.2 (rilasciato con il JDK 1.8) sono stati aggiunti il supporto a REF_CURSOR, le interfacce DriverAction e SQLType, l’Enum JDBCType.

    Utilizzo di JDBC ed eventuali alternative

    L’utilizzo di JDBC nelle applicazioni Android è meno comune, poiché Android ha una propria API (SQLite) per lavorare con i database locali. Quando invece occorre utilizzare database più grandi nelle applicazioni Android, di solito si utilizzano chiamate a servizi RESTful esposti su server remoti. A parte l’utilizzo particolare dei database nelle applicazioni Android, l’elaborazione di dati memorizzati su DBMS da parte di applicazioni Java standalone o applicazioni web, può richiedere la conoscenza e l’utilizzo delle API JDBC.

    Esistono delle alternative per accedere ai database senza fare l’utilizzo diretto di JDBC. Ad esempio, l’application framework Spring utilizza JDBC Template, un’astrazione di più alto livello che semplifica la quantità di codice da scrivere (ma che utilizza JDBC indirettamente per parlare con il database). Un’altra libreria meno utilizzata è RIFE, che fa praticamente la stessa cosa. Infine ci sono le mapping API come Hibernate. Hibernate è API di tipo Object Relational Mapping (ORM) e rappresenta la struttura del database con le classi e gli oggetti Java. Viene comunque utilizzato JDBC in background per comunicare con il database. Esistono altre librerie di mapping (iBATIS da Apache), e la Java Persistence API o JPA (che fa parte della piattaforma Java EE). Anche in questi casi JDBC viene usato comunque, anche se in modo indiretto.

    I due componenti fondamentali di JDBC

    I due componenti fondamentali di JDBC sono:

    1. un driver fornito dal vendor del DBMS, cioè un’implementazione delle interfacce del package java.sql (Driver, Connection, Statement, PreparedStatement, ResultSet, etc …) che siano conformi alle specifiche API java.sql ;
    2. un’implementazione di codice da parte dello sviluppatore che ha il compito di utilizzare l’implementazione del vendor, seguendo più o meno sempre gli stessi passi (caricamento di un driver, connessione al database, creazione di un oggetto Statement, interazione con il database, gestione dei risultati ricavati dal database).

    Nei prossimi articoli dedicati a JDBC vedremo nel dettaglio queste due componenti: cos’è un driver JDBC e i tipi di driver disponibili con le rispettive caratteristiche, e in cosa consiste l’implementazione di codice da parte dello sviluppatore.

     

    Giulio Cantali – IT Consultant

    Creatore di Database Master, il primo percorso per diventare esperti di database

Lascia un commento

Se vuoi condividere la tua opinione, lascia un commento

Puoi usare questi tag e attributi: HTML:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">