GestioneDB.java
Created with JBuilder
import java.sql.*;

// Questa classe ha lo scopo di gestire l'interfaccia con il DB
// in maniera trasparente rispetto alle altre classi dell'applicazione
public class GestioneDB {

  private Connection        connessione;
  private Statement         lineaComandi;
  private ResultSet         risultatoUltimaQuery;
  private ResultSetMetaData campiUltimaQuery;
  private int               risultatoUltimoUpdate;

  public GestioneDB( ) {
    try {
      // Tenta di caricare il driver JDBC-ODBC
      // Se il driver non viene trovato lancia una 'ClassNotFoundException'
      Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver");
    }
    catch (ClassNotFoundException exception) {
      System.err.print("Non ho trovato il driver JDBC-ODBC");
      System.exit(1);
    }
    finally {
      connessione = null;
      lineaComandi = null;
      risultatoUltimaQuery = null;
      campiUltimaQuery = null;
      risultatoUltimoUpdate = 0;
    }
  }

  // 'fileDB' è il nome (completo di percorso) del DB Access con cui connettersi
  public void apri( String fileDB ) {
    try {
      // Tenta di stabilire la connessione e una linea comandi
      // Se il tentativo fallisce lancia una 'SQLException'
      connessione = DriverManager.getConnection(fileDB);
      lineaComandi = connessione.createStatement();
    }
    catch (SQLException exception) {
      System.err.print("Errore nell'apertura del DB: " + exception);
      System.exit(1);
    }
  }

  // Chiusura della connessione al DB
  public void chiudi( ) {
    try {
      lineaComandi.close();
      connessione.close();
    }
    catch (SQLException exception) {
      System.err.print("Errore nella chiusuradel DB: " + exception);
      System.exit(1);
    }
  }

  // Esegue una generica query SQL sul DB: il risultato viene memorizzato
  // nell'attributo 'risultatoUltimaQuery', mentre i campi del risultato
  // vengono memorizzati nell'attributo 'campiUltimaQuery'. Se la query
  // fallisce, entrambe gli attributi sono impostati al valore 'null'
  public void eseguiQuerySql( String querySql ) {
    try {
      risultatoUltimaQuery = lineaComandi.executeQuery(querySql);
      campiUltimaQuery = risultatoUltimaQuery.getMetaData();
    }
    catch (SQLException exception) {
      System.err.println("Errore nell'esecuzione della query: " + exception);
      risultatoUltimaQuery = null;
      campiUltimaQuery = null;
    }
  }

  // Esegue un generico update SQL sul DB: il risultato viene memorizzato
  // nell'attributo 'risultatoUltimoUpdate'
  public void eseguiUpdateSql( String updateSql ) {
    try {
      risultatoUltimoUpdate = lineaComandi.executeUpdate(updateSql);
    }
    catch (SQLException exception) {
      System.err.println("Errore nell'esecuzione dell'update: " + exception);
      risultatoUltimoUpdate = 0;
    }
  }

  // Metodi per la gestione dell'intestazione del result set
  public int restituisciNumeroCampi( ) {
    try {
      return campiUltimaQuery.getColumnCount();
    }
    catch (SQLException exception) {
      return 0;
    }
  }
  public String restituisciNomeCampo( int i ) {
    try {
      return campiUltimaQuery.getColumnName(i);
    }
    catch (SQLException exception) {
      return null;
    }
  }

  // Metodi per la gestione del result set
  public boolean avanzaAlProssimoRecord() {
    try {
      return risultatoUltimaQuery.next();
    }
    catch (SQLException exception) {
      return false;
    }
  }
  public void iniziaScansioneRecord() {
    try {
      risultatoUltimaQuery.beforeFirst();
    }
    catch (SQLException exception) {
      // Non esegue alcunché
    }
  }
  public Object restituisciOggetto(int i) {
    try {
      return risultatoUltimaQuery.getObject(i);
    }
    catch (SQLException exception) {
      return null;
    }
  }

  // Verifica se l'ultimo update è andato a buon fine
  public boolean restituisciRisultatoUltimoUpdate() {
    return (risultatoUltimoUpdate != 0 ? true : false);
  }

  // Elabora il risultato dell'ultima query sotto forma di una String
  // Se ci sono stati problemi con l'ultima query, restituisce 'null'
  public String restituisciRisultatoComeTesto() {
    StringBuffer risultato = new StringBuffer("");
    int numeroCampi = restituisciNumeroCampi();
    if (numeroCampi > 0) {
      for ( int i = 1; i <= numeroCampi; i++ ) {
        String campo = restituisciNomeCampo(i);
        if (campo != null) {
          risultato.append(restituisciNomeCampo(i) + "\t");
        }
      }
      risultato.append( "\n" );
    }
    while (avanzaAlProssimoRecord()) {
      for ( int i = 1; i <= numeroCampi; i++ ) {
        Object valore = restituisciOggetto(i);
        if (valore != null) {
          risultato.append(valore + "\t");
        }
      }
      risultato.append("\n");
    }
    return risultato.toString();
  }

  // Un main con funzione di testing (non è il main dell'applicazione)
  public static void main(String[] args) {
    // Crea la connessione al DB tramite la classe GestioneDB
    GestioneDB gestioneDB = new GestioneDB();
    String myDB = "jdbc:odbc:Agenda";
    gestioneDB.apri(myDB);

    // Query di prova (1)
    String query1 = "SELECT * FROM Recapiti;";
    gestioneDB.eseguiQuerySql(query1);
    System.out.println("QUERY 1 ==============================");
    System.out.print(gestioneDB.restituisciRisultatoComeTesto());

    // Update di prova (1)
    String update1 = "INSERT INTO Recapiti " +
                    "(nome,cognome,indirizzo,cap,città,telefono,mail) " +
                    "VALUES ('Ersilio','Rossi','Corso Torino'," +
                     "'16100','Genova','010813456','ersilio@mbox.it');";
    gestioneDB.eseguiUpdateSql(update1);
    System.out.println("UPDATE 1: " +
                       gestioneDB.restituisciRisultatoUltimoUpdate());

    // Query di prova (2)
    String query2 = "SELECT * FROM Recapiti;";
    gestioneDB.eseguiQuerySql(query2);
    System.out.println("QUERY 2 ==============================");
    System.out.print(gestioneDB.restituisciRisultatoComeTesto());

    // Update di prova (2)
    String update2 = "UPDATE Recapiti " +
                    "SET indirizzo='Corso Torino, 3' " +
                     "WHERE nome='Ersilio' AND cognome='Rossi';";
    gestioneDB.eseguiUpdateSql(update2);
    System.out.println("UPDATE 2: " +
                       gestioneDB.restituisciRisultatoUltimoUpdate());

    // Query di prova (2)
    String query3 = "SELECT nome,cognome,indirizzo FROM Recapiti " +
                    "WHERE nome='Ersilio' AND cognome='Rossi';";
    gestioneDB.eseguiQuerySql(query3);
    System.out.println("QUERY 3 ==============================");
    System.out.print(gestioneDB.restituisciRisultatoComeTesto());

    // Update di prova (3)
    String update3 = "DELETE FROM Recapiti " +
                     "WHERE nome='Ersilio' AND cognome='Rossi';";
    gestioneDB.eseguiUpdateSql(update3);
    System.out.println("UPDATE 3: " +
                       gestioneDB.restituisciRisultatoUltimoUpdate());

    // Query di prova (4)
    String query4 = "SELECT * FROM Recapiti;";
    gestioneDB.eseguiQuerySql(query4);
    System.out.println("QUERY 4 ==============================");
    System.out.print(gestioneDB.restituisciRisultatoComeTesto());

    // Chiude la connessione al DB
    gestioneDB.chiudi();
    System.exit(0);
  }
}

GestioneDB.java
Created with JBuilder