English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JDBC 结果集(ResultSet)

Le istruzioni SQL per leggere i dati da una query di database restituiscono i dati del result set. La clausola SELECT è il metodo standard per selezionare righe dal database e visualizzarle nel result set. L'interfaccia Sql.ResultSet rappresenta il result set della query di database.

L'oggetto ResultSet mantiene un cursore che punta alla riga corrente del result set. Il termine 'result set' si riferisce alle righe e alle colonne di dati contenuti nell'oggetto ResultSet.

I metodi dell'interfaccia ResultSet possono essere divisi in tre categorie-

  • Metodi di navigazione: Utilizzato per muovere il cursore a destra e a sinistra.

  • Metodo di lettura: Utilizzato per visualizzare i dati delle colonne della riga corrente indicata dal cursore.

  • Metodo di aggiornamento:Utilizzato per aggiornare i dati di ciascuna colonna della riga corrente. Successivamente, l'aggiornamento può anche essere aggiornato nel database di base.

Il cursore può muoversi in base alle proprietà del ResultSet. Queste proprietà sono specificate quando si crea lo Statement che genera il ResultSet corrispondente.

JDBC fornisce i seguenti metodi di connessione per creare statement con ResultSet richiesto-

  • createStatement(int RSType, int RSConcurrency);

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

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

Il primo parametro rappresenta il tipo dell'oggetto ResultSet, il secondo parametro è uno dei due costanti ResultSet, utilizzato per specificare se il result set è solo lettura o aggiornabile.

Tipo di result set

I possibili RSType sono elencati di seguito. Se non si specifica alcun tipo di ResultSet, si ottiene automaticamente un ResultSet di tipo TYPE_FORWARD_ONLY.

TipoDescrizione
ResultSet.TYPE_FORWARD_ONLY

Il cursore può muoversi solo avanti nel result set.

ResultSet.TYPE_SCROLL_INSENSITIVE

Il cursore può scorrere avanti e indietro e il result set non è sensibile alle modifiche apportate al database da altre persone dopo aver creato il result set.

ResultSet.TYPE_SCROLL_SENSITIVE.

Il cursore può scorrere avanti e indietro e il result set è molto sensibile alle modifiche apportate al database da altre persone dopo aver creato il result set.

Concordanza del ResultSet

Le possibili RSConcurrency sono indicate di seguito. Se non specifici alcun tipo di concordanza, verrà automaticamente assegnato il tipo CONCUR_READ_ONLY.

ConcordanzaDescrizione
ResultSet.CONCUR_READ_ONLY

Creare un set di risultati readonly. Questo è il valore predefinito

ResultSet.CONCUR_UPDATABLE

Creare un set di risultati aggiornabile.

Fino ad ora, tutti gli esempi che abbiamo scritto possono essere scritti come segue, questo esempio inizializza un oggetto Statement per creare un oggetto ResultSet readonly-

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

Navigazione del set di risultati

L'interfaccia ResultSet contiene diversi metodi che riguardano il movimento del cursore, tra cui -

序号方法与说明
1public void beforeFirst() throws SQLException

Spostare il cursore prima della prima riga.

2public void afterLast() throws SQLException

Spostare il cursore dopo l'ultima riga.

3public boolean first() throws SQLException

Spostare il cursore alla prima riga.

4public void last() throws SQLException

Spostare il cursore all'ultima riga.

5public boolean absolute(int row) throws SQLException

Spostare il cursore alla riga specificata.

6public boolean relative(int row) throws SQLException

Spostare il cursore di un numero specificato di righe avanti o indietro rispetto alla sua posizione attuale.

7public boolean previous() throws SQLException

Spostare il cursore alla riga precedente. Se la riga precedente non è nel set di risultati, questo metodo restituisce false.

8public boolean next() throws SQLException

Spostare il cursore alla riga successiva. Se non ci sono più righe nel set di risultati, questo metodo restituisce false.

9public int getRow() throws SQLException

Restituisce il numero di riga puntato dal cursore.

10public void moveToInsertRow() throws SQLException

Sposta il cursore a una riga speciale nel set di risultati, che può essere utilizzata per inserire una nuova riga nel database. Ricorda la posizione corrente del cursore.

11public void moveToCurrentRow() throws SQLException

Se il cursore è attualmente posizionato nella riga di inserimento, il cursore viene spostato alla riga corrente; altrimenti, questo metodo non esegue alcuna operazione

为了更好地理解,让我们研究“Navigazione - Esempio di codice

Visualizza il set di risultati

L'interfaccia ResultSet contiene molti metodi utilizzati per ottenere i dati della riga corrente.

Ogni possibile tipo di dati ha un metodo get, ogni metodo get ha due versioni -

  • Colonna con il nome della colonna.

  • Indice con l'indice della colonna.

Ad esempio, se l'interessante colonna di visualizzazione contiene un int, è necessario utilizzare uno dei metodi getInt() di ResultSet

序号方法与说明
1public int getInt(String columnName) throws SQLException

Restituisce l'intero nella colonna con il nome columnName della riga corrente.

2public int getInt(int columnIndex) throws SQLException

Restituisce il numero intero nella colonna di indice specificata della riga corrente. L'indice della colonna parte da 1, il che significa che la prima colonna della riga è 1, la seconda colonna è 2 e così via.

Allo stesso modo, nell'interfaccia ResultSet, per ogni uno degli otto tipi di base Java e per i tipi comuni (come java.lang.String, java.lang.Object e java.net.URL), ci sono metodi get.

Ci sono 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. Consulta la documentazione per ulteriori informazioni sull'uso di questi tipi di dati SQL.

Per comprendere meglio, esaminiamoVisualizza - Esempio di codice

Aggiornamento del set di risultati

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

Come per il metodo get, ogni tipo di dati ha due metodi di aggiornamento -

  • Colonna con il nome della colonna.

  • Indice con l'indice della colonna.

Ad esempio, per aggiornare la colonna Stringa della riga corrente del set di risultati, è possibile utilizzare uno dei seguenti metodi updateString() -

序号方法与说明
1public void updateString(int columnIndex, String s) throws SQLException

将指定列中的 String 更改为 s 的值。

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

与前面的方法类似,只是列是通过其名称而不是索引指定的。

java.sql 包中有八种原始数据类型以及 String,Object,URL 和 SQL 数据类型的更新方法。

更新结果集中的一行会更改 ResultSet 对象中当前行的列,但不会更改基础数据库中的行。要更新对数据库中行的更改,您需要调用以下方法之一。

序号方法与说明
1public void updateRow()

通过更新数据库中相应的行来更新当前行。

2public void deleteRow()

从数据库中删除当前行

3public void refreshRow()

刷新结果集中的数据,以反映数据库中最近的任何更改。

4public void cancelRowUpdates()

取消对当前行所做的任何更新。

5public void insertRow()

在数据库中插入一行。只有当光标指向插入行时,才能调用此方法。

为了更好地理解,让我们研究“更新示例代码