back to top

Gestire le connessioni ai database con JDBC

La tecnologia Java ha ottenuto anche molto successo grazie all’accesso al Database JDBC, concorrenziale all’ormai noto ODBC.

Nell’otitca multipiattaforma le connseeioni JDBC sono studiate per potersi collegare a qualsiasi motore database, indipendentemente da esso e dalla piattaforma di utilizzo. La rivoluzione stà proprio nel fatto che nessuna riga di codice dovrà essere cambiata nel caso si cambi il DBMS utilizzato: ad esempio se una azienda vuole migrare i propri dati aziendali da un DB Oracle o DB2 della IBM, su un DBMS gratuito come MySQL non dovrà cambiare il programma o le righe di codice assegnate alla gestione delle connessioni… JDBC si occupa di far comunicare Java con il nuovo database senza interventi di tipo applicativo.

JDBC, in sostanza, permette una ancora più ampia flessibilità nello sviluppo di applicazioni multidistribuite. Possiamo programmare una soluzione in Linux ed eseguirla in Windows o in un Macintosh grazie alla possibilità di interagire con qualsiasi DBMS.

JDBC dovrebbe essere l’acronimo non ufficiale di Java DataBase Connectivity: Connettività Java ai DataBase. E’ composto da due componenti principali: una implementazione delle specifiche RDBMS del Vendor, anche di terze parti, conforme alle specifiche API di java.sql e una implementazione dell’applicazione da parte del programmatore.

L’implementazione delle interfacce del Vendor sono definite dal Package java.sql, e sono: Connection, Driver, Statement, PreparedStatement, CallableStatement, Resultset, ResultSetMetaData e DatabaseMetaData. La maggior parte dei Vendor di terze parti comunque allega una ampia documentazione a proposito delle connesisoni JDBC, spesso comprime il codice già pronto per una implementazione in pacchetti .JAR, in maniera da semplificare ulteriormente il lavoro.

Pertanto grazie a questa tecnica l’implementazione da parte del programmatore risulta abbastanza semplice, questi i passi essenziali:

  • Caricare il Driver
  • Aprire una Connessione al Database
  • Creare un Oggetto Statement
  • Interagire con il Database
  • Gestire e visualizzare i risultati ottenuti dalle ResultSet.
Facciamo un esempio:
import java.sql.*;

public class ProvaJDBC {
  public static void main (String args[]){
    
    try {
      String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
      Class.forName(driver);
      String url = "jdbc:odbc:myDataSource";
      Connection con = DriverManager.getConnection(url, "username", "password");
      Statement cmd = con.createStatement();
      String query = "SELECT * FROM nomeTabella";
      ResultSet res = cmd.executeQuery(query);
      while (res.next()) {
        System.out.println(res.getString("nomeColonna1"));
        System.out.println(res.getString("nomeColonna2"));
      }
      res.close(); // chiudere le risorse DB è obbligatorio
      cmd.close();
      con.close();
    }

    catch (SQLException e){
      e.printStackTrace();
    }

    catch (ClassNotFoundException e){
      e.printStackTrace();
    }
  }
}
Avete visto che, con poche righe di codice, si è creati una connesisone ad un database ODBC / JDBC nel server, indipendentemente dal tipo di database, o dalla piattaforma. Nella connessione passiamo i tre dati essenziali: il nome del database, un username e la sua password. Grazie al metodo executeQuery() dell’oggetto Statement eseguiamo l’istruzione SQL impostata precedentemente in una Stringa. Infine con un ciclo while collegato al metodo next() del ResultSet (tabella calcolata dalla Query eseguita) stampiamo a schermo i valori delle prime due colonne. Ricordarsi sempre di utilizzare i metodi close() per ogni oggetto aperto, in questo caso per il ResultSet, per la Statement e per la Connection; infatti molti programmatori sanno che quando si lavora con i database è indispensabile liberare la memoria, anche per avere dei processi più veloci.

Infine gestiamo anche due errori da tenere spesso in considerazione: l’SQLException ci indica quando abbiamo sbagliato una istruzione SQL, mente la ClassNotFoundException è utile nel caso in cui fallisca il caricamento della classe Driver con il metodo forName() dell’oggetto Class.

Per studiare a fondo il capitolo JDBC vi rimando alla completa documentazione della Sun Microsystem reperibile a questa pagina, dove potrete trovare tutorial ed esempi di sviluppo.

Pubblicitร 
Articolo precedente
Articolo successivo