Lettura dati da un foglio Excel® tramite bridge jdbc-odbc
Innanzi tutto grazie ad Alessandro Grande per questo e gli articoli che seguiranno!
Nella maggior parte delle circostanze quando si realizza un’applicazione Java® che deve interfacciarsi a una fonte dati esterna si presume che questa sia una base di dati, in talune circostanze però si potrebbe avere la necessità di importare le informazioni differente, nel nostro caso specifico da un foglio Excel®. In questo articolo descriveremo come questo possa essere realizzato facendo uso di una semplice connessione tramite bridge jdbc®.
Come prima cosa è fondamentale creare una nuova connessione alla sorgente delle informazioni, ipotizziamo a tal proposito che la nostra fonte contenga una rubrica telefonica ed il nome del file Excel® sia rubrica.xls.
Apriamo dunque la finestra per la gestione delle fonti ODBC
Selezionare Aggiungi, comparirà a questo punto una immagine simile alla seguente:
Selezionare la voce Microsoft Excel Driver, in questo modo sarà possibile fornire i dati per l’accesso al workbook.
A questo punto per estrarre le informazioni dal workbook sarà sufficiente utilazzare il seguente codice:
packageexcelreader;
import java.sql.*;
/** * * @author Alessandro */ public class ExcelReader {
/** * @param args the command line arguments */ public static void main(String[] args) { Connection excelConnection = null; Statement stmt = null; try { Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); excelConnection = DriverManager.getConnection( “jdbc:odbc:rubrica”, “”, “” ); stmt = excelConnection.createStatement(); String query = “SELECT * from [rubrica$];”; ResultSet rs = stmt.executeQuery(query); System.out.println( “Sono state individuate le seguenti entry” ); while( rs.next() ) { System.out.printf( “info contatto per %s %s telefono: %s cellulare %s mail %s\n”,rs.getString(“nome”),rs.getString(“cognome”),rs.getString(“telefono”), rs.getString(“cellulare”),rs.getString(“mail”) ); } } catch( ClassNotFoundException | SQLException e ) { System.err.println( e ); } finally { try { stmt.close(); excelConnection.close(); } catch( Exception e ) { System.err.println( e ); } } } } |
A questo punto si rendono necessari alcuni chiarimenti:
- La struttura della rubrica prevede che i nomi delle colonne siano rispettivamente:
- Nome
- Cognome
- Telefono
- Cellulare
Il che spiega l’argomento del metodo getString();
- Nella formulazione della query il nome della tabella è espresso rispettando il seguente formalismo [<nomedelFoglio>$] nel nostro caso specifico infatti il foglio in cui sono stati memorizzati i dati è stato chiamato “rubrica”, questo significa che se il vostro foglio si fosse chiamato Foglio1 in luogo di rubrica nella nostra query si sarebbe dovuto scriver [Foglio1$], si faccia la solito attenzione alla distinzione tra maiuscolo e minuscolo;
- Nella formulazione della query nulla ci vieta di utilizzare la clausola WHERE per specificare eventuali limitazioni circa l’insieme dei risultati da produrre; chiaramente discorso analogo vale anche nel caso dell’elenco delle colonne da utilizzare nella costruzione del risultato.
Nel prossimo articolo descriveremo un secondo modo di interagire con un foglio Excel® utilizzando però un diverso approccio basato sull’api sviluppata da Lars Vogel.
Commenti