JDBC - Ensembles de résultats

Les instructions SQL qui lisent les données d'une requête de base de données renvoient les données dans un jeu de résultats. L'instruction SELECT est le moyen standard de sélectionner des lignes dans une base de données et de les afficher dans un jeu de résultats. L' interface java.sql.ResultSet représente l'ensemble de résultats d'une requête de base de données.

Un objet ResultSet conserve un curseur qui pointe vers la ligne actuelle dans le jeu de résultats. Le terme «jeu de résultats» fait référence aux données de ligne et de colonne contenues dans un objet ResultSet.

Les méthodes de l'interface ResultSet peuvent être divisées en trois catégories -

  • Navigational methods: Utilisé pour déplacer le curseur.

  • Get methods: Utilisé pour afficher les données dans les colonnes de la ligne actuelle pointées par le curseur.

  • Update methods:Utilisé pour mettre à jour les données dans les colonnes de la ligne actuelle. Les mises à jour peuvent également être mises à jour dans la base de données sous-jacente.

Le curseur est mobile en fonction des propriétés du ResultSet. Ces propriétés sont désignées lorsque l'instruction correspondante qui génère le ResultSet est créée.

JDBC fournit les méthodes de connexion suivantes pour créer des instructions avec le ResultSet souhaité -

  • createStatement(int RSType, int RSConcurrency);

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

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

Le premier argument indique le type d'un objet ResultSet et le second argument est l'une des deux constantes ResultSet permettant de spécifier si un jeu de résultats est en lecture seule ou peut être mis à jour.

Type de ResultSet

Les RSType possibles sont indiqués ci-dessous. Si vous ne spécifiez aucun type de ResultSet, vous en obtiendrez automatiquement un TYPE_FORWARD_ONLY.

Type La description
ResultSet.TYPE_FORWARD_ONLY Le curseur ne peut avancer que dans le jeu de résultats.
ResultSet.TYPE_SCROLL_INSENSITIVE Le curseur peut faire défiler vers l'avant et vers l'arrière, et le jeu de résultats n'est pas sensible aux modifications apportées par d'autres à la base de données qui se produisent après la création du jeu de résultats.
ResultSet.TYPE_SCROLL_SENSITIVE. Le curseur peut défiler vers l'avant et vers l'arrière et le jeu de résultats est sensible aux modifications apportées par d'autres à la base de données qui se produisent après la création du jeu de résultats.

Concurrence de ResultSet

Les RSConcurrency possibles sont indiquées ci-dessous. Si vous ne spécifiez aucun type de concurrence, vous en obtiendrez automatiquement un qui est CONCUR_READ_ONLY.

Concurrence La description
ResultSet.CONCUR_READ_ONLY Crée un jeu de résultats en lecture seule. C'est la valeur par défaut
ResultSet.CONCUR_UPDATABLE Crée un jeu de résultats pouvant être mis à jour.

Tous nos exemples écrits jusqu'à présent peuvent être écrits comme suit, qui initialise un objet Statement pour créer un objet ResultSet en avant uniquement, en lecture seule -

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

Parcourir un ensemble de résultats

Il existe plusieurs méthodes dans l'interface ResultSet qui impliquent de déplacer le curseur, y compris -

SN Méthodes et description
1 public void beforeFirst() throws SQLException

Déplace le curseur juste avant la première ligne.

2 public void afterLast() throws SQLException

Déplace le curseur juste après la dernière ligne.

3 public boolean first() throws SQLException

Déplace le curseur sur la première ligne.

4 public void last() throws SQLException

Déplace le curseur sur la dernière ligne.

5 public boolean absolute(int row) throws SQLException

Déplace le curseur sur la ligne spécifiée.

6 public boolean relative(int row) throws SQLException

Déplace le curseur du nombre donné de lignes vers l'avant ou vers l'arrière, à partir de l'endroit où il pointe actuellement.

sept public boolean previous() throws SQLException

Déplace le curseur sur la ligne précédente. Cette méthode renvoie false si la ligne précédente est hors du jeu de résultats.

8 public boolean next() throws SQLException

Déplace le curseur sur la ligne suivante. Cette méthode renvoie false s'il n'y a plus de lignes dans le jeu de résultats.

9 public int getRow() throws SQLException

Renvoie le numéro de ligne sur lequel pointe le curseur.

dix public void moveToInsertRow() throws SQLException

Déplace le curseur sur une ligne spéciale du jeu de résultats qui peut être utilisée pour insérer une nouvelle ligne dans la base de données. L'emplacement actuel du curseur est mémorisé.

11 public void moveToCurrentRow() throws SQLException

Ramène le curseur sur la ligne actuelle si le curseur se trouve actuellement sur la ligne d'insertion; sinon, cette méthode ne fait rien

Pour une meilleure compréhension, étudions Naviguer - Exemple de code .

Affichage d'un ensemble de résultats

L'interface ResultSet contient des dizaines de méthodes pour obtenir les données de la ligne actuelle.

Il existe une méthode get pour chacun des types de données possibles, et chaque méthode get a deux versions -

  • Celui qui prend un nom de colonne.

  • Celui qui prend dans un index de colonne.

Par exemple, si la colonne que vous souhaitez afficher contient un int, vous devez utiliser l'une des méthodes getInt () de ResultSet -

SN Méthodes et description
1 public int getInt(String columnName) throws SQLException

Renvoie le entier dans la ligne actuelle de la colonne nommée columnName.

2 public int getInt(int columnIndex) throws SQLException

Renvoie l'int dans la ligne actuelle dans l'index de colonne spécifié. L'index de colonne commence à 1, ce qui signifie que la première colonne d'une ligne est 1, la deuxième colonne d'une ligne est 2, et ainsi de suite.

De même, il existe des méthodes get dans l'interface ResultSet pour chacun des huit types primitifs Java, ainsi que des types courants tels que java.lang.String, java.lang.Object et java.net.URL.

Il existe également des méthodes pour obtenir les types de données SQL java.sql.Date, java.sql.Time, java.sql.TimeStamp, java.sql.Clob et java.sql.Blob. Consultez la documentation pour plus d'informations sur l'utilisation de ces types de données SQL.

Pour une meilleure compréhension, étudions Affichage - Exemple de code .

Mettre à jour un ensemble de résultats

L'interface ResultSet contient une collection de méthodes de mise à jour pour mettre à jour les données d'un jeu de résultats.

Comme pour les méthodes get, il existe deux méthodes de mise à jour pour chaque type de données -

  • Celui qui prend un nom de colonne.

  • Celui qui prend dans un index de colonne.

Par exemple, pour mettre à jour une colonne String de la ligne actuelle d'un jeu de résultats, vous utiliserez l'une des méthodes updateString () suivantes -

SN Méthodes et description
1 public void updateString(int columnIndex, String s) throws SQLException

Remplace la chaîne de la colonne spécifiée par la valeur s.

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

Similaire à la méthode précédente, sauf que la colonne est spécifiée par son nom au lieu de son index.

Il existe des méthodes de mise à jour pour les huit types de données primitifs, ainsi que pour les types de données String, Object, URL et SQL dans le package java.sql.

La mise à jour d'une ligne dans le jeu de résultats modifie les colonnes de la ligne actuelle dans l'objet ResultSet, mais pas dans la base de données sous-jacente. Pour mettre à jour vos modifications apportées à la ligne dans la base de données, vous devez appeler l'une des méthodes suivantes.

SN Méthodes et description
1 public void updateRow()

Met à jour la ligne actuelle en mettant à jour la ligne correspondante dans la base de données.

2 public void deleteRow()

Supprime la ligne actuelle de la base de données

3 public void refreshRow()

Actualise les données du jeu de résultats pour refléter les modifications récentes dans la base de données.

4 public void cancelRowUpdates()

Annule toutes les mises à jour effectuées sur la ligne actuelle.

5 public void insertRow()

Insère une ligne dans la base de données. Cette méthode ne peut être appelée que lorsque le curseur pointe sur la ligne d'insertion.

Pour une meilleure compréhension, étudions la mise à jour - Exemple de code .