TP6

6.0 Mettre les tables à jours

Supposons qu'après la première semaine, le propriétaire du The Coffee Break veuille mettre à jours la colonne VENTES de la table CAFE en entrant le nombre de livres vendues pour chaque type de café. L'instruction SQL pour mettre à jour est la suivante :

String updateString = "UPDATE CAFE" +
"SET VENTES = 75" +
"WHERE NOM_CAFE LIKE 'Colombian'";

Utilisant l'instruction stmt, le code JDBC exécute l'instruction SQL contenue dans updateString :

stmt.executeUpdate(updateString);

La table COFFES doit maintenant ressembler à ça :

NOM_CAFE FO_ID PRIX VENTES TOTAL
Colombian 101 7.99 75 0
French_Roast 49 8.99 0 0
Espresso 150 9.99 0 0
Colombian_Decaf 101 8.99 0 0
French_Roast_Decaf 49 9.99 0 0

 

Notez que nous n'avons pas encore mis à jour la colonne TOTAL, sa valeur est toujours 0.

Maintenant, sélectionnons la ligne mise à jour, rapportons la valeur dans les colonnes de NOM_CAFE et de VENTES, et affichons ces valeurs :

String requete = "SELECT NOM_CAFE, VENTES FROM CAFE" +
"WHERE NOM_CAFE LIKE 'Colombian'";
ResultSet rs = stmt.executeQuery(requete);
while(rs.next()){
String s = rs.getString("NOM_CAFE");
int n = rs.getInt("VENTES");
System.out.println(n + " livres de" + s + " vendu cette semaine.");

Ça affichera :

75 livres de Colombian vendu cette semaine

La clause WHERE limite la sélection à une seule ligne, il n'y avait qu'une seule ligne dans le result set rs, et donc une seule ligne a été affichée. Dans ce cas, il est possible d'écrire le code sans la boucle while :

rs.next();
String s = rs.getString(1);
int n = rs.getInt(2);
System.out.println(n + " livres de " + s + " vendu cette semaine.");

Même si il n'y a qu'un seul résultat dans le result set, vous devez utiliser la méthode next pour y accéder. Un objet ResultSet est créer avec un curseur pointant au dessus de la première ligne. Le premier appel de la méthode next positionne le curseur sur la première (et dans ce cas, la seule) ligne de rs. Dans ce code, next est appelé juste une fois, donc si il y avait eu une autre ligne, elle n'aurait jamais pu être accédée.

Maintenant mettons à jour la colonne TOTAL en ajoutant le montant hebdomadaire au total existant, et affichons le nombre de livres vendues à ce jour :

String updateString = "UPDATE CAFE" +
"SET TOTAL = TOTAL + 75 " +
"WHERE NOM_CAFE LIKE 'Colombian'";
stmt.executeUpdate(updateString);
String query = "SELECT NOM_CAFE, TOTAL FROM CAFE" +
"WHERE NOM_CAFE LIKE 'Colombian'";
ResultSet rs = stmt.executeQuery(query);
while(rs.next()){

String s = rs.getString(1);
int n = rs.getInt(2);
System.out.println(n+" livres de" + s + " vendu jusqu'à maintenant.");

}

Notez que dans cet exemple, nous utilisons l'index de la colonne plutôt que son nom, fournir l'index 1 à getString (la première colonne du result set est NOM_CAFE), et l'index 2 à getInt (la seconde colonne du result set est TOTAL). Il est important de faire la distinction entre l'index d'une colonne dans la table de la base de données comme opposée à l'index dans le result set. Par exemple, TOTAL est la cinquième colonne dans la table CAFE mais c'est la seconde colonne dans le résultat généré par la requête dans l'exemple ci-dessus.

.
Précédent Suivant


Revenir à la page principale

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