Interrogare un database significa cercare tra i suoi dati. Lo si fa inviando istruzioni SQL al database. Per farlo, avete bisogno prima di tutto di una connessione al database aperta. Una volta che hai una connessione aperta, hai bisogno di creare un oggetto Statement
, come questo:
Statement statement = connection.createStatement();
Una volta creato il Statement
puoi usarlo per eseguire query SQL, come questo:
String sql = "select * from people";ResultSet result = statement.executeQuery(sql);
Quando esegui una query SQL ottieni un ResultSet
. Il ResultSet
contiene il risultato della tua query SQL. Il risultato viene restituito in righe con colonne di dati. Si iterano le righe del ResultSet
in questo modo:
while(result.next()) { String name = result.getString("name"); long age = result.getLong ("age");}
Il metodo ResultSet.next()
passa alla riga successiva nel ResultSet
, se ci sono altre righe. Se ci sono altre righe, restituisce true. Se non ci sono più righe, restituisce false.
È necessario chiamare next()
almeno una volta prima di poter leggere qualsiasi dato. Prima della prima chiamata next()
il ResultSet
è posizionato prima della prima riga.
Puoi ottenere i dati delle colonne per la riga corrente chiamando alcuni dei metodi getXXX()
, dove XXX è un tipo di dati primitivo. Per esempio:
result.getString ("columnName"); result.getLong ("columnName"); result.getInt ("columnName"); result.getDouble ("columnName"); result.getBigDecimal("columnName"); etc.
Il nome della colonna di cui ottenere il valore viene passato come parametro a una qualsiasi di queste chiamate al metodo getXXX()
.
Puoi anche passare un indice della colonna, come questo:
result.getString (1); result.getLong (2); result.getInt (3); result.getDouble (4); result.getBigDecimal(5); etc.
Perché questo funzioni devi sapere quale indice una data colonna ha nel ResultSet
. Potete ottenere l’indice di una data colonna chiamando il metodo ResultSet.findColumn()
, in questo modo:
int columnIndex = result.findColumn("columnName");
Se iterate grandi quantità di righe, fare riferimento alle colonne per il loro indice potrebbe essere più veloce che per il loro nome.
Quando avete finito di iterare il ResultSet
dovete chiudere sia il ResultSet
che l’oggetto Statement
che lo ha creato (se avete finito, cioè). Lo fai chiamando i loro metodi close()
, come questo:
result.close();statement.close();
Naturalmente dovresti chiamare questi metodi all’interno di un blocco finally
per assicurarti che vengano chiamati anche se si verifica un’eccezione durante l’iterazione ResultSet
.
Esempio completo
Ecco un esempio di codice di query completo:
Statement statement = connection.createStatement();String sql = "select * from people";ResultSet result = statement.executeQuery(sql);while(result.next()) { String name = result.getString("name"); long age = result.getLong("age"); System.out.println(name); System.out.println(age);}result.close();statement.close();
Ed ecco di nuovo l’esempio, con i blocchi try-finally
aggiunti. Notate, ho lasciato fuori i blocchi catch
per rendere l’esempio più breve.
Statement statement = null;try{ statement = connection.createStatement(); ResultSet result = null; try{ String sql = "select * from people"; ResultSet result = statement.executeQuery(sql); while(result.next()) { String name = result.getString("name"); long age = result.getLong("age"); System.out.println(name); System.out.println(age); } } finally { if(result != null) result.close(); }} finally { if(statement != null) statement.close();}