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

Ensemble de résultats JDBC (ResultSet)

Les instructions SQL pour lire des données à partir d'une requête de base de données renvoient les données du jeu de résultats. Les instructions SELECT sont la méthode standard pour sélectionner des lignes à partir de la base de données et les visualiser dans le jeu de résultats. L'interface Sql.ResultSet représente le jeu de résultats de la requête de base de données.

L'objet ResultSet maintient un curseur pointant vers la ligne actuelle du jeu de résultats. Le terme 'jeu de résultats (result set)' fait référence aux lignes et colonnes de données contenus dans l'objet ResultSet.

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

  • Méthodes de navigation: Utilisé pour déplacer le curseur vers la gauche ou vers la droite.

  • Méthode Get: Utilisé pour visualiser les données des colonnes de la ligne actuelle pointée par le curseur.

  • Méthode Update:Utilisé pour mettre à jour les données des différentes colonnes de la ligne actuelle. Ensuite, la mise à jour peut également être mise à jour dans la base de données sous-jacente.

Le curseur peut se déplacer en fonction des attributs ResultSet. Ces attributs sont spécifiés lors de la création de l'instruction Statement correspondante pour le ResultSet généré.

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 paramètre représente le type de l'objet ResultSet, le deuxième paramètre est l'une des constantes ResultSet, utilisée pour spécifier si le jeu de résultats est en lecture seule ou modifiable.

Type de jeu de résultats

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

TypeDescription
ResultSet.TYPE_FORWARD_ONLY

Le curseur ne peut se déplacer que vers l'avant dans le jeu de résultats.

ResultSet.TYPE_SCROLL_INSENSITIVE

Le curseur peut être déplacé vers l'avant et vers l'arrière, et le jeu de résultats est insensible aux modifications apportées au base de données par d'autres personnes après la création du jeu de résultats.

ResultSet.TYPE_SCROLL_SENSITIVE.

Le curseur peut faire défiler vers l'avant et vers l'arrière, et le jeu de résultats est très sensible aux modifications apportées au base de données par d'autres personnes après la création du jeu de résultats.

Concurrence du ResultSet

Les types de concurrence possibles RSConcurrency sont indiqués ci-dessous. Si vous ne spécifiez aucun type de concurrence, vous obtiendrez automatiquement le type CONCUR_READ_ONLY.

ConcurrenceDescription
ResultSet.CONCUR_READ_ONLY

Créez un jeu de résultats en lecture seule. C'est la valeur par défaut

ResultSet.CONCUR_UPDATABLE

Créez un jeu de résultats mis à jour.

Jusqu'à présent, tous les exemples que nous avons écrits peuvent être rédigés comme suit, ce qui initialise un objet Statement pour créer un objet ResultSet en lecture seule-

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

navigation du jeu de résultats

L'interface ResultSet contient plusieurs méthodes impliquant le déplacement du curseur, y compris-

NuméroMéthode et description
1public void beforeFirst() throws SQLException

Déplacez le curseur avant la première ligne.

2public void afterLast() throws SQLException

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

3public boolean first() throws SQLException

Déplacez le curseur à la première ligne.

4public void last() throws SQLException

Déplacez le curseur à la dernière ligne.

5public boolean absolute(int row) throws SQLException

Déplacez le curseur à la ligne spécifiée.

6public boolean relative(int row) throws SQLException

Déplacez le curseur d'un certain nombre de lignes vers l'avant ou vers l'arrière à partir de la position actuelle du curseur.

7public boolean previous() throws SQLException

Déplacez le curseur à la ligne précédente. Si la ligne précédente n'est pas dans le jeu de résultats, cette méthode renvoie false.

8public boolean next() throws SQLException

Déplace le curseur à la ligne suivante. Si il n'y a plus de lignes dans le jeu de résultats, ce méthode retourne false.

9public int getRow() throws SQLException

Retourne le numéro de ligne pointé par le curseur.

10public void moveToInsertRow() throws SQLException

Déplace le curseur à la 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. N'oubliez pas la position actuelle du curseur.

11public void moveToCurrentRow() throws SQLException

Si le curseur est actuellement à la ligne d'insertion, déplacez le curseur à la ligne actuelle; sinon, cette méthode ne fait aucune action

Pour mieux comprendre, étudions "Navigation-Code d'exemple.

Voir le jeu de résultats

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

Chaque type de données possible a une méthode get, chaque méthode get a deux versions-

  • Colonne avec le nom de colonne

  • Index avec l'indice de colonne

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

NuméroMéthode et description
1public int getInt(String columnName) throws SQLException

Retourne l'entier actuel de la colonne nommée columnName.

2public int getInt(int columnIndex) throws SQLException

Retourne le nombre entier actuel de la colonne indexée dans la ligne actuelle. L'indice de colonne commence à1Début, ce qui signifie que la première colonne de la ligne est1et la deuxième colonne de la ligne est2et ainsi de suite.

De même, dans l'interface ResultSet, pour chaque type de base Java des huit types de base, ainsi que pour les types courants (comme java.lang.String, java.lang.Object et java.net.URL), il y a une méthode get.

Il existe également des méthodes pour obtenir des 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 obtenir plus d'informations sur l'utilisation de ces types de données SQL.

Pour mieux comprendre, étudionsVoir-Exemple de code.

Mise à jour du jeu de résultats

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

Comme pour la méthode get, chaque type de données a deux méthodes de mise à jour-

  • Colonne avec le nom de colonne

  • Index avec l'indice de colonne

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

NuméroMéthode et description
1public void updateString(int columnIndex, String s) throws SQLException

Changer la valeur de la colonne String spécifiée en s.

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

Similaire aux méthodes précédentes, mais les colonnes sont spécifiées par leur nom plutôt que par leur index.

Le paquet java.sql contient huit types de données primitives, ainsi que les méthodes de mise à jour pour String, Object, URL et types de données SQL.

Mettre à jour une ligne de l'ensemble de résultats modifie les colonnes de la ligne actuelle de l'objet ResultSet, mais ne modifie pas la ligne de base de données. Pour mettre à jour les modifications apportées à la ligne de la base de données, vous devez appeler l'une des méthodes suivantes.

NuméroMéthode et description
1public void updateRow()

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

2public void deleteRow()

Supprimer la ligne actuelle de la base de données.

3public void refreshRow()

Rafraîchir les données de l'ensemble de résultats pour refléter les changements récents dans la base de données.

4public void cancelRowUpdates()

Annuler toute mise à jour actuelle sur la ligne en cours.

5public void insertRow()

Insérer une ligne dans la base de données. Ce méthode ne peut être appelée que lorsque le curseur pointe sur la ligne à insérer.

Pour mieux comprendre, étudions "Mise à jour du code d'exemple.