OVH Cloud OVH Cloud

Return obligatoire inutile...

16 réponses
Avatar
Delf
Salut.
Je code un p'tit programme sous NetBeans.
Voici la fonction qui me pose probleme:

public boolean contains(String pLogin) {

String requestSQL = "SELECT Login FROM User WHERE Login = \"" + pLogin
+ "\"";

try {

ResultSet getResult =
SQLConnection.SQLStatement.executeQuery(requestSQL);

if (getResult.next()) return true;
else return false;
}
catch(Exception e) {

System.out.println("Exception: " + e);
}
/* Ici return demandé... */
}

Et quand j'execute, NetBeans me demande un return la ou je l'ai indique
entre commentaire alors qu'il est completement inutile! Comment contrer
ceci ? Pt'tre que j'ai mal code ma fonction...

Merci anticipe.

--
Delf

10 réponses

1 2
Avatar
laurent sturm
Salut,

C'est normal qu'il te demande une valeur de retour
puisque que tu as définie ta fonction comme il suit
public boolean contains(String pLogin)
{

{
Cette fonction doit retourner un boolean à la fin de son execution.
Si tu ne veux pas de valeur de retour code plutot:
public void contains(String pLogin)
{

{

@+

"Delf" a écrit dans le message de news:
415339f3$0$7432$
Salut.
Je code un p'tit programme sous NetBeans.
Voici la fonction qui me pose probleme:

public boolean contains(String pLogin) {

String requestSQL = "SELECT Login FROM User WHERE Login = "" + pLogin +
""";

try {

ResultSet getResult =
SQLConnection.SQLStatement.executeQuery(requestSQL);

if (getResult.next()) return true;
else return false;
}
catch(Exception e) {

System.out.println("Exception: " + e);
}
/* Ici return demandé... */
}

Et quand j'execute, NetBeans me demande un return la ou je l'ai indique
entre commentaire alors qu'il est completement inutile! Comment contrer
ceci ? Pt'tre que j'ai mal code ma fonction...

Merci anticipe.

--
Delf


Avatar
ZeGrunt
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Salut.

Delf wrote:
public boolean contains(String pLogin) {
String requestSQL = "SELECT Login FROM User WHERE Login = "" +
pLogin + """;
try {
ResultSet getResult > SQLConnection.SQLStatement.executeQuery(requestSQL);
if (getResult.next()) return true;
else return false;
}
catch(Exception e) {

System.out.println("Exception: " + e);
}
/* Ici return demandé... */
}

Et quand j'execute, NetBeans me demande un return la ou je l'ai indique
entre commentaire alors qu'il est completement inutile! Comment contrer
ceci ? Pt'tre que j'ai mal code ma fonction...


Normal : si une exception est levée, tu l'interceptes, affiches le
message mais ne retournes rien. D'où la plainte de NetBeans (et du
compilo surement).

2 solutions : mettre le return qui va bien pour le cas d'erreur ou
laisser l'exception remonter.

ZeGrunt.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFBUz/9nLjyGhlEgFIRAi0PAJ9o+y1serZKtD5/fpmeUXhrKOmeQQCfYUVb
kAgwVMH6KdJ93qyZrgrxffs =KY7I
-----END PGP SIGNATURE-----

Avatar
julien
"Delf" a écrit dans le message de
news:415339f3$0$7432$
Salut.
Je code un p'tit programme sous NetBeans.
Voici la fonction qui me pose probleme:

public boolean contains(String pLogin) {

String requestSQL = "SELECT Login FROM User WHERE Login = "" + pLogin
+ """;

try {

ResultSet getResult > SQLConnection.SQLStatement.executeQuery(requestSQL);

if (getResult.next()) return true;
else return false;
}
catch(Exception e) {

System.out.println("Exception: " + e);
}
/* Ici return demandé... */
}

Et quand j'execute, NetBeans me demande un return la ou je l'ai indique
entre commentaire alors qu'il est completement inutile! Comment contrer
ceci ? Pt'tre que j'ai mal code ma fonction...

Merci anticipe.

--
Delf


c'est normale il par du principe que si tu catch l'exception tu dois
absolument retourner une valeur ( il me semble)
donc soit tu laisse l'exception se propager ( public boolean contains(String
pLogin) throws Tonexception{ ), soit tu retourne une valeur ou mieux si
l'erreur n'est pas sensé ce produire ici tu leve toi meme un exception de
type runtime exception qui n'a pas besoin d'etre catché ni déclarée mais qui
permet de savoir d'ou vient l'erreur si elle se produit un jour ...

en fait c'est tout a fais normale si l'exception est levée lors de l'appel
de la methode cele ci doit forcément renvoyer quelque chose ou lever une
exception ici tu lui dis juste d'envoyer quelquechose sur la sortie
standard.
de plus je te conseil fortement d'envoyer les message d'erreur sur la sortie
d'erreur et non la sortie standard, le plus simple etant d'utiliser
e.Printstacktrace() si mes souvenir sont bon
ou si tu prefere faire un system.err.println("exception ....)
cela permet par la suite de rediriger la sortie d'erreur vers un journal
d'erreur plutot que de tout afficher sur la sortie standard.

voila j'espere t'avoir aidé, si j'ai dis des bétise n'hésitez pas à me
reprendre ca fais un certain temp que j'ai pas fais de java ;)

Avatar
yvon.thoravalNO-SPAM
julien wrote:

le plus simple etant d'utiliser
e.Printstacktrace() si mes souvenir sont bon
ou si tu prefere faire un system.err.println("exception ....)
cela permet par la suite de rediriger la sortie d'erreur vers un journal
d'erreur plutot que de tout afficher sur la sortie standard.


comment fait-on après avoir fait ces system.err.println("exception ....)
pour envoyer ça sur un fichier de log ?
--
yt

Avatar
Delf
julien wrote:

c'est normale il par du principe que si tu catch l'exception tu dois
absolument retourner une valeur ( il me semble)


Ah je ne le savais pas... ca me parait pas tres net ce retour
obligatooire dans un catch :| Pourquoi vouloir un retour si la fonction
genere une exception ? Peut etre parce que par la suite, dans le catch,
au lieu de 'terminer' la fonction, on peut y mettre du code qui au final
retournerait qqchose... hum...

donc soit tu laisse l'exception se propager ( public boolean contains(String
pLogin) throws Tonexception{ ), soit tu retourne une valeur ou mieux si
l'erreur n'est pas sensé ce produire ici tu leve toi meme un exception de
type runtime exception qui n'a pas besoin d'etre catché ni déclarée mais qui
permet de savoir d'ou vient l'erreur si elle se produit un jour ...


Je ne suis pas encore très chaud sur les exceptions. Fuardra que je
zieute la doc un de ces quatres.

en fait c'est tout a fais normale si l'exception est levée lors de l'appel
de la methode cele ci doit forcément renvoyer quelque chose ou lever une
exception ici tu lui dis juste d'envoyer quelquechose sur la sortie
standard.


Pas tres clair...

de plus je te conseil fortement d'envoyer les message d'erreur sur la sortie
d'erreur et non la sortie standard, le plus simple etant d'utiliser
e.Printstacktrace() si mes souvenir sont bon
ou si tu prefere faire un system.err.println("exception ....)
cela permet par la suite de rediriger la sortie d'erreur vers un journal
d'erreur plutot que de tout afficher sur la sortie standard.


Ok.
Je renvoie la meme question que Yvon.

voila j'espere t'avoir aidé, si j'ai dis des bétise n'hésitez pas à me
reprendre ca fais un certain temp que j'ai pas fais de java ;)


Là je débute...
En tout cas merci.

--
Delf

Avatar
Delf
laurent sturm wrote:

Salut,

C'est normal qu'il te demande une valeur de retour
puisque que tu as définie ta fonction comme il suit
public boolean contains(String pLogin)
{

{


Dans le try, j'ai un if (...) return true; else return false;
Normalement, si le try passe, la fonction retourne un boolean. Le
probleme vient donc du catch. Surement, un boolean, retourné je dois :

Cette fonction doit retourner un boolean à la fin de son execution.
Si tu ne veux pas de valeur de retour code plutot:
public void contains(String pLogin)
{

{


Il me faut ce boolean, je n'ai pas d'autre choix.
Merci.

--
Delf

Avatar
Delf
ZeGrunt wrote:

Normal : si une exception est levée, tu l'interceptes, affiches le
message mais ne retournes rien. D'où la plainte de NetBeans (et du
compilo surement).


C'est cela que je trouve bizarre... pourquoi necessairement (dans mon
cas, je ne veux pas remonter l'exception) retoruner un boolean dans le
catch...
Merci.

--
Delf

Avatar
JScoobyCed
Bonjour,

Suite aux messages de reponse des precedents contributeurs, je pense
que ce code devrait resumer:

public boolean contains(String pLogin) throws Exception {

String requestSQL = "SELECT ...";

ResultSet getResult = executeQuery(requestSQL);

if (getResult.next())
return true;

return false;
}

Il ne faut pas non plus oublier de faire le nettoyage du ResultSet et/ou
de la connection.

--
JScoobyCed
What about a JScooby snack Shaggy ? ... Shaggy ?!
Avatar
ZeGrunt
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Salut à tous.

Delf wrote:
C'est cela que je trouve bizarre... pourquoi necessairement (dans mon
cas, je ne veux pas remonter l'exception) retoruner un boolean dans le
catch...


Mais parce que tu as annoncé que tu allais le faire dans le profile de
la méthode.

Il faut bien comprendre que le 'catch' est le point de reprise de
l'exécution en cas de levée dans le bloc 'try' de l'exeption spécifiée.
Une fois le 'catch' executé, la méthode continue juste après le bloc
'try-catch-finally' (sauf s'il y a un 'throw' ou un 'return' dans le
'catch' ou dans le 'finally', bien sûr).

Par conséquent, comme la méthode continue normalement, il faut qu'elle
respecte son contrat càd retourne un boolean.

Quant à la question sur les logs, il y a différentes façons de faire :
soit créer un flux de sortie soi-même, soit écrire sur System.err et
faire une redirection sur la ligne de commande (java MaClass 2>
error.log avec un bash sous Linux/Unix).

Merci.


Pas de quoi.

ZeGrunt.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFBU69TnLjyGhlEgFIRAmnSAJ9f9pVbQv3ujCb1LkFnalDQ/4XsuQCfVOVD
yXq++ErFDkv3LVrx7ObBM7o =NFT7
-----END PGP SIGNATURE-----

Avatar
captainpaf
Delf a pensé très fort :
julien wrote:

c'est normale il par du principe que si tu catch l'exception tu dois
absolument retourner une valeur ( il me semble)


Ah je ne le savais pas... ca me parait pas tres net ce retour obligatooire
dans un catch :| Pourquoi vouloir un retour si la fonction genere une
exception ? Peut etre parce que par la suite, dans le catch, au lieu de
'terminer' la fonction, on peut y mettre du code qui au final retournerait
qqchose... hum...



ta fonction, si on regarde son prototype, doit retourner true si le
login est contenu ou false si il ne l'est pas, c'est tout simple. Mais
ton code peut lever une Exception, si ça arrive, tu dois prévenire
l'utilisateur du disfonctionnement. Par exemple si ton server sql est
down tu peux le réinviter à recommencer plus tard (c'est un exemple).
Par contre, on ne sait pas dans ce cas si le login est contenu ou pas
donc il n'est pas logique de retourner vrai ou faux. Ce n'est pas le
role de ta fonction de gérer ce cas.
Donc si tu veux coder "proprement", je te conseil de créer une class
dérivant d'Exception (a toi de choisir le nom) pour gérer ce cas précit
et de changer ta fonction comme suit :

<CODE>
public boolean contains(String pLogin) throws TonException
{
String requestSQL = "SELECT Login FROM User WHERE Login = "" +
pLogin + """;
try
{
ResultSet getResult =
SQLConnection.SQLStatement.executeQuery(requestSQL);
if (getResult.next()) return true;
else return false;
}
/* une erreur s'est produit, la fonction doit le faire savoir */
catch(Exception e)
{
throw new TonException("bla bla bla");
}
}


// ensuite dans le code qui appelle cette fonction tu fais :
try
{
if(contain("toto")
{
// ok le login est contenu
}
else
{
// le login n'a pas été trouvé
}
}
catch(TonException e)
{
/* la c'est à toi de traiter le problème de la meilleur façon
possible. Par exemple en avertissant l'utilisateur du problème
rencontré pour qu'il puisse agir en conséquence */
}
</CODE>

voilà, en esperant t'avoir aidé.

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com


1 2