Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

ResultSet et Requêtes SQL

6 réponses
Avatar
Clément
Bonjour,

J'essaye désespérèment d'obtenir le nombre de résultat obtenu par ma requete
SQL. Le bout de code estle suivant :
try{
Statement s = conn.createStatement();
String maRequete = "SELECT [Nom] FROM Employés WHERE
Fonction='Représentant(e)'";
s.executeQuery (maRequete);
ResultSet rs = s.getResultSet();
rs.last();
System.out.println("" + rs.getRow());

while(rs.next()){
String employe = rs.getString("Nom");
System.out.println(employe);
}
rs.close ( ); s.close ( );
}catch(SQLException e) {System.out.println("Probleme survenu");}

L'idée c'est que je vais à la fin des enrigistrements et je lui dis de me
donner le numéro de ligne correspondant (qui est égal aux nbr
d'enregistrement à 1 près).
Le problème c'est que l'instruction rs.last() semble poser problème et il me
met toujours : Problème Survenu.

Que faire ?

Merci beaucoup

6 réponses

Avatar
michaelm
Ce serait interessant d'avoir le message d'erreurs, mais le code appel
déjà quelques commentaires :
Dans ta requete SQL, "SELECT [Nom] FROM Employés WHERE
Fonction='Représentant(e)'", [NOM] est surement à remplacer par *
(pour avoir toutes les colonnes) ou par la liste des colonnes à
récupérer.

D'autre part, si les accents et les parenthèses pouvaient être
évitées dans les noms de colonne, ca augmenterait les chances pour
que la requete aboutisse ...

Sinon, rs.last() et rs.getRow() devraient marcher à mon sens une fois
que tu auras réglé les détails ci-dessus, mais en revanche, ce n'est
pas la peine de chercher la suite (rs.next()) puisque tu t'es
positionné sur la dernière ligne.

Si tu as juste besoin du nombre d'occurrences, le mieux est peut être
une requête du type
SELECT COUNT(*) FROM Employés WHERE Fonction='Représentant(e)'"
...
if(rs.next()){System.out.println(rs.getInt(1));}

Si tu veux voir tous les résultats, tu peux faire une boucle et les
compter au passage :
SELECT * FROM Employés WHERE Fonction='Représentant(e)'"
...
int count = 0;
while(rs.next()){
System.out.println(rs.getString("Nom"));
count++;
}
System.out.println("Nombre de lignes trouvées : " + count);

Voilà, en espérant ne pas avoir écrit trop de betise.

Michaël
Avatar
Christophe Tela
michaelm wrote:

Ce serait interessant d'avoir le message d'erreurs, mais le code appel


Avatar
Simon OUALID
La méthode last() n'est pas toujours implémentée par les vendeurs de
SGBD. D'autres fois, c'est juste une histoire de configuration pour que
tes curseurs ne soient pas en TYPE_FORWARD_ONLY (ce qui est par défaut
la plupart du temps le cas).

Mais bon, ces solutions ne sont pas vraiment portable d'un SGBD à un
autre, on a toujours des surprises sur ce genre de détail. C'est
pourquoi je te conseillerais plutôt de te servir des fonctions
d'aggrégation de ton SGBD pour arriver au même résultat...

SQL > SELECT count(nom) FROM EMPLOYES WHERE FONCTION_ID = 2;

Ca te fait une requête de plus, mais d'un point de vue lisibilité et
portabilité, y a pas photo, c'est mieux et plus joli ! ;)

Symon


Clément wrote:
Bonjour,

J'essaye désespérèment d'obtenir le nombre de résultat obtenu par ma requete
SQL. Le bout de code estle suivant :
try{
Statement s = conn.createStatement();
String maRequete = "SELECT [Nom] FROM Employés WHERE
Fonction='Représentant(e)'";
s.executeQuery (maRequete);
ResultSet rs = s.getResultSet();
rs.last();
System.out.println("" + rs.getRow());

while(rs.next()){
String employe = rs.getString("Nom");
System.out.println(employe);
}
rs.close ( ); s.close ( );
}catch(SQLException e) {System.out.println("Probleme survenu");}

L'idée c'est que je vais à la fin des enrigistrements et je lui dis de me
donner le numéro de ligne correspondant (qui est égal aux nbr
d'enregistrement à 1 près).
Le problème c'est que l'instruction rs.last() semble poser problème et il me
met toujours : Problème Survenu.

Que faire ?

Merci beaucoup




Avatar
Simon OUALID
La méthode last() n'est pas toujours implémentée par les vendeurs de
SGBD. D'autres fois, c'est juste une histoire de configuration pour que
tes curseurs ne soient pas en TYPE_FORWARD_ONLY (ce qui est par défaut
la plupart du temps le cas).

Mais bon, ces solutions ne sont pas vraiment portable d'un SGBD à un
autre, on a toujours des surprises sur ce genre de détail. C'est
pourquoi je te conseillerais plutôt de te servir des fonctions
d'aggrégation de ton SGBD pour arriver au même résultat...

SQL > SELECT count(nom) FROM EMPLOYES WHERE FONCTION_ID = 2;

Ca te fait une requête de plus, mais d'un point de vue lisibilité et
portabilité, y a pas photo, c'est mieux et plus joli ! ;)

Symon


Clément wrote:
Bonjour,

J'essaye désespérèment d'obtenir le nombre de résultat obtenu par ma requete
SQL. Le bout de code estle suivant :
try{
Statement s = conn.createStatement();
String maRequete = "SELECT [Nom] FROM Employés WHERE
Fonction='Représentant(e)'";
s.executeQuery (maRequete);
ResultSet rs = s.getResultSet();
rs.last();
System.out.println("" + rs.getRow());

while(rs.next()){
String employe = rs.getString("Nom");
System.out.println(employe);
}
rs.close ( ); s.close ( );
}catch(SQLException e) {System.out.println("Probleme survenu");}

L'idée c'est que je vais à la fin des enrigistrements et je lui dis de me
donner le numéro de ligne correspondant (qui est égal aux nbr
d'enregistrement à 1 près).
Le problème c'est que l'instruction rs.last() semble poser problème et il me
met toujours : Problème Survenu.

Que faire ?

Merci beaucoup




Avatar
Simon OUALID
La méthode last() n'est pas toujours implémentée par les vendeurs de
SGBD. D'autres fois, c'est juste une histoire de configuration pour que
tes curseurs ne soient pas en TYPE_FORWARD_ONLY (ce qui est par défaut
la plupart du temps le cas).

Mais bon, ces solutions ne sont pas vraiment portable d'un SGBD à un
autre, on a toujours des surprises sur ce genre de détail. C'est
pourquoi je te conseillerais plutôt de te servir des fonctions
d'aggrégation de ton SGBD pour arriver au même résultat...

SQL > SELECT count(nom) FROM EMPLOYES WHERE FONCTION_ID = 2;

Ca te fait une requête de plus, mais d'un point de vue lisibilité et
portabilité, y a pas photo, c'est mieux et plus joli ! ;)

Symon


Clément wrote:
Bonjour,

J'essaye désespérèment d'obtenir le nombre de résultat obtenu par ma requete
SQL. Le bout de code estle suivant :
try{
Statement s = conn.createStatement();
String maRequete = "SELECT [Nom] FROM Employés WHERE
Fonction='Représentant(e)'";
s.executeQuery (maRequete);
ResultSet rs = s.getResultSet();
rs.last();
System.out.println("" + rs.getRow());

while(rs.next()){
String employe = rs.getString("Nom");
System.out.println(employe);
}
rs.close ( ); s.close ( );
}catch(SQLException e) {System.out.println("Probleme survenu");}

L'idée c'est que je vais à la fin des enrigistrements et je lui dis de me
donner le numéro de ligne correspondant (qui est égal aux nbr
d'enregistrement à 1 près).
Le problème c'est que l'instruction rs.last() semble poser problème et il me
met toujours : Problème Survenu.

Que faire ?

Merci beaucoup




Avatar
wolverin
Bonjour,

J'essaye désespérèment d'obtenir le nombre de résultat obtenu par ma requete
SQL. Le bout de code estle suivant :
try{
Statement s = conn.createStatement();
String maRequete = "SELECT [Nom] FROM Employés WHERE
Fonction='Représentant(e)'";
s.executeQuery (maRequete);
ResultSet rs = s.getResultSet();
rs.last();
System.out.println("" + rs.getRow());

while(rs.next()){
String employe = rs.getString("Nom");
System.out.println(employe);
}
rs.close ( ); s.close ( );
}catch(SQLException e) {System.out.println("Probleme survenu");}

L'idée c'est que je vais à la fin des enrigistrements et je lui dis de me
donner le numéro de ligne correspondant (qui est égal aux nbr
d'enregistrement à 1 près).
Le problème c'est que l'instruction rs.last() semble poser problème et il me
met toujours : Problème Survenu.

Que faire ?

Merci beaucoup


Soit tu veux juste le nb de tuples correspondant à ce que tu veux et tu

utilises une requête COUNT, soit tu as besoin d'infos en base et en plus
tu veux le nb, dans ce cas je te conseille l'utilisation d'une List
(ArrayList par exemple).
Une List est un tableau dynamique, une fois que tu as récupéré toutes
tes infos, tu n'as plus qu'à faire un size sur la liste et tu as le nb
de tuples.