JDBC: Interrogare il database

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();}

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.