Ho notato che spesso compaiono delle richieste di aiuto per la connessione di Java ad un database MySQL. Così ho deciso di aprire questa discussione-pillola in cui spiegherò come effettuare questa connessione, utilizzando il driver JDBC Connector-J offerto da MySQL.
Introduco questa discussione offrendo una brevissima panoramica sui vari modi a disposizione del programmatore per poter connettere un'applicazione Java con un database in generale. Vi sono essenzialmente 2 modi:
1) mediante l'utilizzo di un driver JDBC;
2) mediante l'utilizzo del bridge JDBC-ODBC offerto da Java.
In questa discussione tratterò solamente la prima alternativa, mentre per la seconda mi limiterò a descriverla brevemente.
Quando si ha la possibilità di utilizzare un driver JDBC specifico per un determinato database è preferibile scegliere la prima opzione. Questo perchè l'utilizzo di un driver JDBC fornisce un accesso diretto al database, ottimizzato per esso, senza alcuna perdita di prestazioni. E' il produttore stesso del database, infatti, che distribuisce il driver JDBC ed in questo modo vengono sfruttate a pieno tutte le caratteristiche del database. Graficamente ecco cosa succede:
Java --> Driver JDBC --> Database
Quando, invece, non si possiede un driver JDBC specifico, si può tranquillamente ricorrere al bridge JDBC-ODBC. Questa caratteristica, da un lato, offre una estrema maneggevolezza: in tutti quei casi in cui non sia facilmente reperibile un driver JDBC (a volte, infatti, non esiste un driver JDBC apposito per un database), è possibile scaricare un driver ODBC ed utilizzare un DSN ODBC di sistema per potervi accedere. Driver ODBC, infatti, esistono oramai per quasi tutti i database esistenti, essendo ODBC uno standard de facto realizzato da Microsoft per la connettività dei database.
Dall'altro lato, però, questa opportunitò ha uno svantaggio: la perdita di prestazioni. Quando si utilizza questa opzione, infatti, i passi che vengono eseguiti per la connessione sono 2: Java si connette al bridge JDBC-ODBC; questo si connette al DSN ODBC di sistema; quest'ultimmo, infine, utilizza il driver ODBC per agganciarsi al database. Graficamente, quindi:
Java --> Bridge JDBC-ODBC --> Driver ODBC --> Database
Il reperimento dei dati e gli aggiornamenti, quindi, sono più lenti perchè seguono una strada più lunga e vie è, effettivamente, una perdita di prestazioni. Ribadisco, comunque, che quest'ultima scelta è senza dubbio molto comoda in tutti quei casi in cui non si desisdera distribuire driver JDBC con l'applicazione, delegando all'utente "l'onere" di fornire un DSN ODBC per il database.
Vediamo, ora, come si fa per connettere un'applicazione Java con un database MySQL facendo uso dell'apposito driver JDBC (chiamato Connector-J). Innanzitutto è necessario scaricare il driver, direttamente dal sito di MySQL. Il seguente link permette di accedere direttamente alla pagina dedicata a Connector-J.
Poi si può scegliere una delle seguenti alternative, per poter utilizzare il driver JDBC:
1) scompattare il JAR del driver nella cartella lib/ext della JDK;
2) scompattare il JAR del driver nella cartella dell'applicazione.
Io, personalmente, preferisco la seconda alternativa poichè svincola l'utente dall'avere driver preinstallati nella macchina. Scompattanto in JAR nella cartella dell'applicazione, infatti, esso sarà già disponibile per la distribuzione assieme all'applicazione; il driver sarà contenuto nel pacchetto di installazione dell'applicazione e quest'ultima saprà esattamente dove andarlo a cercare.
A questo punto tutto è pronto per la scrittura dell'applicazione. Innanzitutto è doveroso ricordare che vi sono diversi tipi di connessione al database: una connessione mediante autenticazione (con nomeutente e password) e una connessione anonima. Non sempre la connessione anonima è supportata, per questo si darà la possibilità a chi scrive l'applicazione di scegliere che tipo di connessione effettuale.
Per facilitare il tutto ho scritto una classe apposita che permette al programmatore di astrarre da tutti i dettagli della connessione vera e propria e che mette a disposizione una serie minimale di metodi per la connessione, l'interrogazione del database, l'aggiornamento, la disconnessione ed il reperimento di eventuali errori riscontrati.