Una volta configurato il driver ODBC possiamo entrare nel vivo dell'argomento con la lettura dei dati contenuti nel nosto database.
L'operazione completa per leggere i dati da una o più tabelle di una base di dati è suddivisa in quattro fasi:
- apertura connessione al database
- esecuzione istruzione
- elaborazione risultato
- chiusura connessione
Ecco uno spezzone di codice che mostra come implemetare in pratica queste fasi:
<!-- per l'esecuzione corretta delle istruzioni SQL è necessario importare il relativo package: java.sql.* --> <%@ page language="java" import="java.sql.*" %> connection dbconn = null; // carica il file di classe del driver // per il collegamento al database con il ponte Odbc Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // apre la connessione con il database "miodb" dbconn = DriverManager.getConnection("jdbc:odbc:miobd","admin","pwd"); // manda in esecuzione l'istruzione SQL Statement statement = dbconn.createStatement(); ResultSet rs = statement.executeQuery("SELECT dato FROM tab1");
Fin qui abbiamo implementato i primi due punti. In questa fase l'oggetto rs
contiene l'insieme dei risultati ottenuti dalla SELECT, rappresentati nella classe ResultSet
. Questa classe ci permette di compiere una scansione di tutti i record e leggere il contenuto dei campi.
Esaminiamo un esempio di questo meccanismo con uno spezzone di codice che stampa i dati a video.
// elabora i risultati while (rs.next()) { // ottiene il dato dat = rs.getInt("dato"); // stampa a video out.println(dat); } //chiude la connessione dbconn.close();
In questo semplice esempio sono stati prelevati dalla tabella tab1
del database miodb
tutti i valori del campo dato
.
I metodi esposti dalla classe ResultSet
per la lettura dei dati si differenziano in base al tipo del campo da rappresentare. Il nome di ogni metodo è composto dal prefisso "get", seguito dal tipo di dato che può elaborare.
Per chiarire il concetto, ecco un breve tabella che elenca i tipi di variabile del database e i rispettivi metodi da utilizzare.
Metodo | Tipo del campo |
---|---|
getInt() |
Numerico intero |
getFloat() |
Numerico con virgola |
getByte() |
Numerico byte |
getlong() |
Numerico lungo |
getString() |
Stringa o testo |
getBoolean() |
Booleano (vero/falso) |
getdate() |
Data |
Per avanzare tra i record (spostare in avanti il cursore) resultSet
espone il metodo next()
, che restituisce un valore booleano che indica se il cursore è arrivato al termine dalla tabella. È sufficiente creare un ciclo while(rs.next())
per scorrere senza ulteriori istruzioni la tabella generata dalla query.