TP5

5.0 Accéder aux valeurs d'un Result Set

Nous allons maintenant voir comment envoyer les requêtes écritent dans la section précédante depuis un programme écrit en Java, et comment accéder à ce résultat.
JDBC renvoie les résultats dans un objet ResultSet, donc, nous avons besoin de déclarer une instance de la class ResultSet pour contenir nos résultats. Le code qui suit déclare l'objet ResultSet rs et lui assigne le résultat de notre requête précédente :

ResultSet rs = stmt.executeQuery(
"SELECT COF_NAME,PRICE FROM COFFEES");

5.1 Utiliser la méthode next

La variable rs, qui est une instance de ResultSet, contient les lignes de café et leurs prix. Pour pouvoir accéder à leurs noms et à leurs prix, nous irons dans chaque ligne et récupèrerons les valeurs selon leur type. La méthode next déplace ce qui est appelé curseur à la ligne suivante, et fait de cette ligne (appelée la ligne courante) celle sur laquelle nous travaillons. Initialement, ce curseur est positionné juste au dessus de la première ligne d'un objet ResultSet, donc le premier appel à la méthode next déplace le curseur à la première ligne et en fait la ligne courante. L'invocation successive de la méthode next déplace le curseur vers le bas, ligne par ligne. Notez qu'avec l'API JDBC 2.0, couvert dans la prochaine section, vous pouvez déplacer le curseur vers l'arrière, à une position spécifique, et à une position relative à la ligne courante.

5.2 Utiliser la méthode getXXX

Nous utilisons la méthode getXXX du type approprié pour accéder à une valeur dans chaque colonne. Par exemple, la première colonne de chaque ligne du result set est NOM_CAFE, qui contient une valeur de type SQL VARCHAR. La méthode pour accéder à une valeur de type VARCHAR est getString. La seconde colonne de chaque ligne contient une valeur de type SQL FLOAT, et la méthode pour accéder à ces valeurs est getFloat. Le code qui suit accède aux valeurs contenues dans la ligne courante du result set et affiche la ligne avec le nom suivit de trois espaces puis le prix. À chaque fois que la méthode next est invoquée, la ligne suivante devient la ligne courante, et la boucle continue jusqu'à ce qu'il n'y ai plus de ligne dans le result set.

String requete = "SELECT NOM_CAFE, PRIX FROM CAFE";
ResultSet rs = stmt.executeQuery(requete);
while(rs.next()){
String s = rs.getString("NOM_CAFE");
float n = rs.getFloat("PRIX");
System.out.println(s + " " + n);

Le programme affichera ceci :

Colombian 7.99
French_Roast 8.99
Espresso 9.99
Colombian_Decaf 8.99
French_Roast_Decaf 9.99

Voyons maintenant plus précisément comment la méthode getXXX fonctionne en examinant les deux instructions getXXX dans ce code. Premièrement, examinons getString.

String s = rs.getString("NOM_CAFE");

La méthode getString est invoquée sur l'objet ResultSet rs, donc getString doit accéder aux valeurs contenues dans la colonne NOM_CAFE de la ligne courante de rs. La valeur que getString rapporte a été convertie du SQL VARCHAR, au String de Java, et a été assignée à l'objet String s. Notez que nous avons utilisé la variable s dans l'expression println ci-dessus.

La situation est la même avec la méthode getFloat, à l'exception près, qu'il rapporte la valeur contenue dans la colonne PRIX, qui est un FLOAT SQL, et la convertir en FLOAT de Java avant de l'assigner à la variable n.

JDBC offre deux façons d'identifier une colonne dont une méthode getXXX prendra la valeur. Une des façons est de donner le nom de la colonne, comme dans l'exemple ci-dessus, et la seconde, est de donner l'index de la colonne (numéro de la colonne), où 1 désigne la première colonne, 2 la deuxième colonne et ainsi de suite. Utiliser le numéro de la colonne à la place de son nom donne le code suivant :

String s = rs.getString(1);
float n = rs.getFloat(2);

La première ligne de code prend la valeur de la première colonne de la ligne courante de rs (colonne NOM_CAFE), la convertie en String Java, et l'assigne à s. La deuxième ligne de code, prend la valeur contenue dans la deuxième colonne de la ligne courante de rs, la convertie en float Java, et l'assigne à n. Notez que le nombre de la colonne réfère au numéro de la colonne dans le result set, pas dans la table originale.

En résumé, JDBC vous autorise à utiliser le nom de la colonne ou son numéro comme argument dans une méthode getXXX. Utiliser le numéro de colonne est un peu plus pratique, mais dans certains cas, le nom de la colonne est requis. En général, fournir le nom de la colonne est essentiellement équivalent à fournir son numéro.

Grâce à la méthode getXXX de JDBC, vous pourrez alors accéder aux différents types de données SQL. Par exemple, la méthode getInt peut être utilisée pour accéder aux types numériques, ou caractères. Mais il est recommandé de n'utiliser getInt que pour accéder à des données SQL de type INTEGER. Il ne peut pas être utilisé pour rapporter des données de type BINARY, VARBINARY, LONGVARBINARY, DATE, TIME ou TIMESTAMP.

Corrigé

À cette adresse, vous trouverez les méthodes getXXX, et leurs conseils d'utilisation :

http://java.sun.com/docs/books/tutorial/jdbc/basics/_retrievingTable.html

Précédent Suivant


Revenir à la page principale

© Tous droits réservés 2003 - Patrick ITEY - INRIA Sophia-Antipolis