|
Cosa è JDBC
|
|
|
Java permette la costruzione di ‘client/server database applications’ indipendenti dalla piattaforma.
A partire dalla versione 1.1 del JDK (Java Development Kit) è stata introdotta una libreria di classi ed interfacce, che fa parte della libreria standard del linguaggio, il cui scopo è permettere l’interazione tra applicazioni Java, Applet e Servlet, con server di database e quindi rendere possibile il dialogo con database remoti o locali. L’insieme delle classi che implementano le interfacce rappresentano un modulo software chiamato driver JDBC.
JDBC non è l’acronimo di Java DataBase Connectivity, per quanto la cosa sembri strana vista la somiglianza con ODBC, tecnologia Microsoft, acronimo di Open DataBase Connectivity.
L’uso più comune di JDBC è in applicazioni che devono comunicare con database relazionali. A tale scopo esso permette di inviare richieste SQL ad un server e di ottenere e gestire i risultati.
Le fasi fondamentali
Caricamento del driver attraverso ClassForName(DRIVER);
per mysql DRIVER = "org.gjt.mm.mysql.Driver"
per access DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver" ... etc.
Connessione con il db attraverso Connection con = DriverManager.getConnection(dbURL);
dove dbURL è una STRING del tipo dbURL = "jdbc:odbc:people" e people è un DSN per il sistema.
Creazione e invio di un'istruzione SQL attraverso Statement st = con.createStatement();
Resultset rs = st.executeQuery(sql);
Gestione del risultato attraverso un ciclo del tipo:
while(rs.next()) { String var = rs.getString(1) ... }
|
|
Drivers
|
|
|
Un driver è un insieme di classi che implementa le interfacce fornite dalla libreria JDBC.
Le quattro categorie
JDBC-ODBC bridge.
Un bridge JDBC-ODBC ha il compito di convertire chiamate JDBC in chiamate ODBC.
ODBC (Open DataBase Connectivity) è un protocollo Microsoft molto diffuso, derivato dallo standard X/Open SQL Call Level Interface, per l'accesso ai dati di un db; in pratica ogni database ha il suo driver ODBC.
A partire da JDK 1.1 la Sun ha introdotto un bridge JDBC-ODBC con la classe sun.jdbc.odbc.JdbcOdbcDriver.
Il limite di un bridge sono le prestazioni di solito non esaltanti.
Nel codice specificheremo STRING DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";
API NATIVE del DBMS.
Conversione delle chiamate JDBC in chiamate API Native del DBMS.
Migliore del precedente dal punto di vista prestazionale ma non essendo scritto completamente in Java è limitato in termini di portabilità.
Middleware Server – NET DRIVER.
In questo caso il driver è scritto completamente in Java, ma necessita di un server middleware che permetta la connessioni di clients Java ai vari DBMS. E' il server che interagisce con il database in maniera trasparente rispetto al client.
Pure Java.
Dal nome si intuisce che il driver è scritto completamente in Java; attraverso un protocollo di rete permette la connessione ad un DBMS.
I drivers di questo tipo e del precedente sono veloci e chiaramente multipiattaforma.
|
|
JDBC & MySQL
|
torna su
|
|
Una pagina jsp può accedere ai dati contenuti in un database MySQL. E' possibile scaricare il driver necessario dal web. Lo stesso discorso vale anche per database di tipo Oracle.
Una volta ottenuto il file .jar è possibile seguire tre strade:
Usare classpath, in sistemi Windows set classpath c:\\mm.mysql-2.0.14\\mm.mysql-2.0.14-bin.jar;%classpath%
Inserire il file mm.mysql-2.0.14-bin.jar nella directory web-inf/lib della propria applicazione.
Inserire il file mm.mysql-2.0.14-bin.jar nella directory common/lib di TOMCAT per tutte le applicazioni.
Scarica l'ultima versione del driver - 2.0.14
All'interno di un blocco di dichiarazione settiamo:
String DRIVER = "org.gjt.mm.mysql.Driver"
String dbURL = "jdbc:mysql://localhost:3306/dbName"; //dbName DSN per il sistema.
Le operazioni di accesso sono quelle già viste per i database Access.
|
|
Connessione ad un DataBase
|
torna su
|
|
Integriamo nel codice html la direttiva page per importare le librerie necessarie.
In particolare java.sql.*. Successivamente dichiariamo le varibili DRIVER e dbURL in una
sezione di dichiarazione cosicchè diventino variabili di istanza.

Ora registriamo il driver con Class.forName(DRIVER) e creiamo una connessione con il metodo getConnection.
Costruiamo una string sql con il codice sql per interrogare o modificare il db, creiamo un'istruzione con
createStatement ed eseguiamola con il metodo executequery(sql) ottenendo il Resultset di risposta. Supponiamo
di avare un database people(.mdb) registrato come DSN per il nostro sistema con una tabella e tre campi nome,
cognome, mansione. Leggiamone le tuple nel ciclo while.
tilizziamo inoltre la classe impiegato, il cui codice è mostrato in seguito per memorizzare
i dati di tutti i dipendenti; tali dati verranno settati come attributo della richiesta. Il motivo
dell'uso di questa classe e per la scissione tra contenuto e rappresentazione. La pagina .jsp appena
creata ha il compito di ottenere i dati dal db ed immagazzinarli nella richiesta, poi attraverso la forward
il controllo passa ad un'altra pagina che si occupa di mostrare a video i dati leggendoli dalla richiesta con
getAttribute.

Occupiamoci ora della pagina che ha il compito di mostrare il risultato dell'operazione nel db.
Costruiamo una lista di oggetti (i nostri dati) ed un iteratore per scorrerne gli elementi. Con un
semplice ciclo while stampiamo a video tutti gli impiegati.

Il codice della classe impiegato:
|