JDBC - Set di risultati

Le istruzioni SQL che leggono i dati da una query di database restituiscono i dati in un set di risultati. L'istruzione SELECT è il modo standard per selezionare le righe da un database e visualizzarle in un set di risultati. L' interfaccia java.sql.ResultSet rappresenta la serie di risultati di una query di database.

Un oggetto ResultSet mantiene un cursore che punta alla riga corrente nel set di risultati. Il termine "set di risultati" si riferisce ai dati di riga e colonna contenuti in un oggetto ResultSet.

I metodi dell'interfaccia ResultSet possono essere suddivisi in tre categorie:

  • Navigational methods: Utilizzato per spostare il cursore.

  • Get methods: Utilizzato per visualizzare i dati nelle colonne della riga corrente puntata dal cursore.

  • Update methods:Utilizzato per aggiornare i dati nelle colonne della riga corrente. Gli aggiornamenti possono quindi essere aggiornati anche nel database sottostante.

Il cursore è mobile in base alle proprietà del ResultSet. Queste proprietà vengono designate quando viene creata l'istruzione corrispondente che genera il ResultSet.

JDBC fornisce i seguenti metodi di connessione per creare istruzioni con il ResultSet desiderato:

  • createStatement(int RSType, int RSConcurrency);

  • prepareStatement(String SQL, int RSType, int RSConcurrency);

  • prepareCall(String sql, int RSType, int RSConcurrency);

Il primo argomento indica il tipo di un oggetto ResultSet e il secondo argomento è una delle due costanti ResultSet per specificare se un set di risultati è di sola lettura o aggiornabile.

Tipo di ResultSet

I possibili RSType sono riportati di seguito. Se non specifichi alcun tipo di ResultSet, ne otterrai automaticamente uno TYPE_FORWARD_ONLY.

genere Descrizione
ResultSet.TYPE_FORWARD_ONLY Il cursore può spostarsi solo in avanti nel set di risultati.
ResultSet.TYPE_SCROLL_INSENSITIVE Il cursore può scorrere avanti e indietro e il set di risultati non è sensibile alle modifiche apportate da altri al database che si verificano dopo la creazione del set di risultati.
ResultSet.TYPE_SCROLL_SENSITIVE. Il cursore può scorrere avanti e indietro e il set di risultati è sensibile alle modifiche apportate da altri al database che si verificano dopo la creazione del set di risultati.

Concorrenza di ResultSet

Le possibili RSConcurrency sono fornite di seguito. Se non specifichi alcun tipo di concorrenza, ne otterrai automaticamente uno che è CONCUR_READ_ONLY.

Concorrenza Descrizione
ResultSet.CONCUR_READ_ONLY Crea un set di risultati di sola lettura. Questa è l'impostazione predefinita
ResultSet.CONCUR_UPDATABLE Crea un set di risultati aggiornabile.

Tutti i nostri esempi scritti fino ad ora possono essere scritti come segue, che inizializza un oggetto Statement per creare un oggetto ResultSet di sola lettura e solo forward -

try {
   Statement stmt = conn.createStatement(
                           ResultSet.TYPE_FORWARD_ONLY,
                           ResultSet.CONCUR_READ_ONLY);
}
catch(Exception ex) {
   ....
}
finally {
   ....
}

Navigazione in un set di risultati

Esistono diversi metodi nell'interfaccia ResultSet che implicano lo spostamento del cursore, tra cui:

SN Metodi e descrizione
1 public void beforeFirst() throws SQLException

Sposta il cursore appena prima della prima riga.

2 public void afterLast() throws SQLException

Sposta il cursore subito dopo l'ultima riga.

3 public boolean first() throws SQLException

Sposta il cursore sulla prima riga.

4 public void last() throws SQLException

Sposta il cursore sull'ultima riga.

5 public boolean absolute(int row) throws SQLException

Sposta il cursore sulla riga specificata.

6 public boolean relative(int row) throws SQLException

Sposta il cursore del numero di righe specificato in avanti o indietro, da dove sta attualmente puntando.

7 public boolean previous() throws SQLException

Sposta il cursore sulla riga precedente. Questo metodo restituisce false se la riga precedente è fuori dal set di risultati.

8 public boolean next() throws SQLException

Sposta il cursore alla riga successiva. Questo metodo restituisce false se non ci sono più righe nel set di risultati.

9 public int getRow() throws SQLException

Restituisce il numero di riga a cui punta il cursore.

10 public void moveToInsertRow() throws SQLException

Sposta il cursore su una riga speciale nel set di risultati che può essere utilizzata per inserire una nuova riga nel database. La posizione corrente del cursore viene memorizzata.

11 public void moveToCurrentRow() throws SQLException

Sposta il cursore di nuovo sulla riga corrente se il cursore si trova attualmente sulla riga di inserimento; in caso contrario, questo metodo non fa nulla

Per una migliore comprensione, studiamo Navigate - Example Code .

Visualizzazione di un set di risultati

L'interfaccia ResultSet contiene dozzine di metodi per ottenere i dati della riga corrente.

Esiste un metodo get per ciascuno dei possibili tipi di dati e ogni metodo get ha due versioni:

  • Uno che accetta un nome di colonna.

  • Uno che accetta un indice di colonna.

Ad esempio, se la colonna che si desidera visualizzare contiene un int, è necessario utilizzare uno dei metodi getInt () di ResultSet -

SN Metodi e descrizione
1 public int getInt(String columnName) throws SQLException

Restituisce l'int nella riga corrente nella colonna denominata columnName.

2 public int getInt(int columnIndex) throws SQLException

Restituisce l'int nella riga corrente nell'indice di colonna specificato. L'indice di colonna inizia da 1, il che significa che la prima colonna di una riga è 1, la seconda colonna di una riga è 2 e così via.

Allo stesso modo, ci sono metodi get nell'interfaccia ResultSet per ciascuno degli otto tipi primitivi Java, oltre a tipi comuni come java.lang.String, java.lang.Object e java.net.URL.

Esistono anche metodi per ottenere i tipi di dati SQL java.sql.Date, java.sql.Time, java.sql.TimeStamp, java.sql.Clob e java.sql.Blob. Consultare la documentazione per ulteriori informazioni sull'utilizzo di questi tipi di dati SQL.

Per una migliore comprensione, studiamo Visualizzazione - Codice di esempio .

Aggiornamento di un set di risultati

L'interfaccia ResultSet contiene una raccolta di metodi di aggiornamento per aggiornare i dati di un set di risultati.

Come con i metodi get, ci sono due metodi di aggiornamento per ogni tipo di dati:

  • Uno che accetta un nome di colonna.

  • Uno che accetta un indice di colonna.

Ad esempio, per aggiornare una colonna String della riga corrente di un set di risultati, dovresti utilizzare uno dei seguenti metodi updateString ():

SNMetodi e descrizione
1public void updateString(int columnIndex, String s) throws SQLException

Modifica la stringa nella colonna specificata nel valore di s.

2 public void updateString(String columnName, String s) throws SQLException

Simile al metodo precedente, tranne per il fatto che la colonna è specificata dal suo nome invece che dal suo indice.

Esistono metodi di aggiornamento per gli otto tipi di dati primitivi, nonché i tipi di dati String, Object, URL e SQL nel pacchetto java.sql.

L'aggiornamento di una riga nel set di risultati modifica le colonne della riga corrente nell'oggetto ResultSet, ma non nel database sottostante. Per aggiornare le modifiche alla riga nel database, è necessario richiamare uno dei seguenti metodi.

SN Metodi e descrizione
1 public void updateRow()

Aggiorna la riga corrente aggiornando la riga corrispondente nel database.

2 public void deleteRow()

Elimina la riga corrente dal database

3 public void refreshRow()

Aggiorna i dati nel set di risultati per riflettere eventuali modifiche recenti nel database.

4 public void cancelRowUpdates()

Annulla tutti gli aggiornamenti effettuati sulla riga corrente.

5 public void insertRow()

Inserisce una riga nel database. Questo metodo può essere richiamato solo quando il cursore punta alla riga di inserimento.

Per una migliore comprensione, studiamo l' aggiornamento - Codice di esempio .