Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
909 connectés 

  FORUM HardWare.fr
  Programmation

  [Java] pb avec les Exceptions

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java] pb avec les Exceptions

n°158698
El_gringo
Posté le 13-06-2002 à 16:17:50  profilanswer
 

tin tin, me revoila !
déja !? ben oui, déja ! :D
Là, je crée une exception JDataException qui hérite de Exception.
C une exception que je lancerai lors d'une recherche dans une base de données.
cette exception peut être lancée si par exemple, un enregistrement n'est pas trouvé. Le constructeur sera alors:

Code :
  1. JDataException (String msg) {
  2.    super (msg); // ça, j'imagine que ça appel le constructeur de la classe mère
  3. }


Cette même exception peut être lancée suite au catch d'une SQLException.
c pour ça que j'aurai voulu avoir le constructeur suivant aussi:

Code :
  1. JDataException (String msg, SQLException e) {
  2.    String message = new String("Erreur sql.\nCode Erreur: " + getErrorCode());
  3.    super (msg);
  4. }


 
Mais le compilateur ça lui plait pas. Vous savez ce qui me dit le salaud !? Que l'appel au constructeur de la classe mère doit se faire en 1er. Mais je fais comment moi ? Exception a pas de membre setMessage (String msg)...


Message édité par El_gringo le 13-06-2002 à 16:18:58
mood
Publicité
Posté le 13-06-2002 à 16:17:50  profilanswer
 

n°158700
darklord
You're welcome
Posté le 13-06-2002 à 16:20:37  profilanswer
 

tu fais l'inverse

Code :
  1. public JDataException (String msg, SQLException e) {
  2.   super (msg); 
  3.   String message = new String("Erreur sql.\nCode Erreur: " + getErrorCode());
  4. }


 
ceci dit je ne dirai pas que c'est la meillere solution.


---------------
Just because you feel good does not make you right
n°158702
darklord
You're welcome
Posté le 13-06-2002 à 16:21:54  profilanswer
 

mais c'est quoi là ton excetion ?????
 
c'est n'importe quoi !!!  
 
bon attends 2 sec


---------------
Just because you feel good does not make you right
n°158704
El_gringo
Posté le 13-06-2002 à 16:23:36  profilanswer
 

DarkLord a écrit a écrit :

mais c'est quoi là ton excetion ?????
 
c'est n'importe quoi !!!  
 
bon attends 2 sec  




 
Bah ouais, j'avoue que g un peu de mal là... :(

n°158705
darklord
You're welcome
Posté le 13-06-2002 à 16:23:38  profilanswer
 

Code :
  1. public JDataException extends Exception {
  2. private SQLException nested = null;
  3. public JDataException (String msg) {
  4.  super(msg);
  5. }
  6. public JDataException (String msg, SQLException exception) {
  7.  super(msg);
  8.  nested = exception;
  9. }
  10. public SQLException getNestedException() {
  11.  return nested;
  12. }
  13. }


---------------
Just because you feel good does not make you right
n°158706
El_gringo
Posté le 13-06-2002 à 16:24:13  profilanswer
 

DarkLord a écrit a écrit :

tu fais l'inverse

Code :
  1. public JDataException (String msg, SQLException e) {
  2.   super (msg); 
  3.   String message = new String("Erreur sql.\nCode Erreur: " + getErrorCode());
  4. }


 
ceci dit je ne dirai pas que c'est la meillere solution.  




 
Ms le truc, c que je voulais construire une "Exception" avec le message que g constitué !

n°158708
darklord
You're welcome
Posté le 13-06-2002 à 16:25:08  profilanswer
 

Ecoute, explique toi clairement. Déjà si c'est une exception relative au BD tu ne dois pas hériter de Exception ...
 
Dis moi quel est le domaine, ce que tu veux faire + un exemple de chaque constructeur et on reparle.


---------------
Just because you feel good does not make you right
n°158709
darklord
You're welcome
Posté le 13-06-2002 à 16:25:36  profilanswer
 

el_gringo a écrit a écrit :

 
 
Ms le truc, c que je voulais construire une "Exception" avec le message que g constitué !  




 
ouais bin là tu crées un message local au constructeur. Il ne sera jamais stocké nul part de toutes manières !!


---------------
Just because you feel good does not make you right
n°158712
El_gringo
Posté le 13-06-2002 à 16:26:42  profilanswer
 

DarkLord a écrit a écrit :

Code :
  1. public JDataException extends Exception {
  2. private SQLException nested = null;
  3. public JDataException (String msg) {
  4.  super(msg);
  5. }
  6. public JDataException (String msg, SQLException exception) {
  7.  super(msg);
  8.  nested = exception;
  9. }
  10. public SQLException getNestedException() {
  11.  return nested;
  12. }
  13. }

 




 
Ooooohhh ! La belle exception, je m'en vais de ce pas l'ajouter dans mon, projet.
Merci Dakinou  :hello: (tu permet que je t'appels Dakinou ? :D)

n°158714
greg@frees​tarthu
Posté le 13-06-2002 à 16:27:33  profilanswer
 

Code :
  1. JDataException (String msg, SQLException e) {
  2.   super (msg + "(Erreur sql.\nCode Erreur: " + getErrorCode()+" )" );
  3. }


 
par exemple
 (si tu veux pas garder de trace de l'exception nestée mais juste un msg)

mood
Publicité
Posté le 13-06-2002 à 16:27:33  profilanswer
 

n°158715
El_gringo
Posté le 13-06-2002 à 16:29:29  profilanswer
 

DarkLord a écrit a écrit :

 
 
ouais bin là tu crées un message local au constructeur. Il ne sera jamais stocké nul part de toutes manières !!  




 
ha, ms merde, je m'étais planté ds le 1er post. ce que j'voulais faire c'était ça::

Code :
  1. JDataException (String msg, SQLException e) {
  2.    String message = new String("Erreur sql.\nCode Erreur: " + getErrorCode());
  3.    super (msg);
  4. }


 
Mais ta classe elle me va très bien.

n°158716
El_gringo
Posté le 13-06-2002 à 16:30:49  profilanswer
 

greg@freestarthu a écrit a écrit :

Code :
  1. JDataException (String msg, SQLException e) {
  2.   super (msg + "(Erreur sql.\nCode Erreur: " + getErrorCode()+" )" );
  3. }


 
par exemple
 (si tu veux pas garder de trace de l'exception nestée mais juste un msg)  




 
Ha ouais, t'as raison. Je suis lourd moi desfois ! :(  
Merci aussi. Entre ta soluce et celle de Dark, 'faut que j'réfléchisse selon ce dont g besoin...

n°158718
greg@frees​tarthu
Posté le 13-06-2002 à 16:33:07  profilanswer
 

el_gringo a écrit a écrit :

 
 
Ha ouais, t'as raison. Je suis lourd moi desfois ! :(  
Merci aussi. Entre ta soluce et celle de Dark, 'faut que j'réfléchisse selon ce dont g besoin...  




celle de dark est plus "complete", mais ça t'oblige a chopper la nestedexception et a recreer le msg qd tu en as besoin. à toi de voir ce que tu fais de ces xcptns. :-)

n°158725
darklord
You're welcome
Posté le 13-06-2002 à 16:41:17  profilanswer
 

greg@freestarthu a écrit a écrit :

 
celle de dark est plus "complete", mais ça t'oblige a chopper la nestedexception et a recreer le msg qd tu en as besoin. à toi de voir ce que tu fais de ces xcptns. :-)  




 
mais j'avais pas compris ca moi. J'avais compris qu'il voulait garder l'objet SQLException :(


---------------
Just because you feel good does not make you right
n°158726
darklord
You're welcome
Posté le 13-06-2002 à 16:41:41  profilanswer
 

el_gringo a écrit a écrit :

 
 
ha, ms merde, je m'étais planté ds le 1er post. ce que j'voulais faire c'était ça::

Code :
  1. JDataException (String msg, SQLException e) {
  2.    String message = new String("Erreur sql.\nCode Erreur: " + getErrorCode());
  3.    super (msg);
  4. }


 
Mais ta classe elle me va très bien.  




 
bin oui et alors ????
 
tu crées un objet message puis tu fais super avec le message original  
 
 [:rofl]


---------------
Just because you feel good does not make you right
n°158735
El_gringo
Posté le 13-06-2002 à 16:45:58  profilanswer
 

DarkLord a écrit a écrit :

 
 
bin oui et alors ????
 
tu crées un objet message puis tu fais super avec le message original  
 
 [:rofl]  




 
Putain de merde, je peut le faire, j'en suis sur !

Code :
  1. JDataException (String msg, SQLException e) {
  2.    String message = new String("Erreur sql.\nCode Erreur: " + getErrorCode());
  3.    super (message);
  4. }


Ouaaahh... [:yaissev]  
(Tout ça pour un truc qui compile pas en plus ! [:iznogoud_23] )

n°158739
darklord
You're welcome
Posté le 13-06-2002 à 16:48:55  profilanswer
 

si c'est pour ca utilise le code de gregg qui fait ce que tu veux mais fait qd meme e.getErrorCode() :D


---------------
Just because you feel good does not make you right
n°158750
veryfree
Posté le 13-06-2002 à 17:01:11  profilanswer
 

voila un exemple
en fait faut utiliser throws New Execption
 

Code :
  1. public class NotALetterException extends Exception {
  2.   static int count=0;
  3.   String msg;
  4.  
  5.  
  6.   public NotALetterException(String s) {
  7.     msg = s;
  8.   }
  9.  
  10.   public static void countLetter(char c) throws NotALetterException {
  11.  
  12.     if (Character.isJavaLetter(c)) {
  13.       count++;
  14.     }
  15.     else {
  16.       throw new NotALetterException(c + " is not a letter" );
  17.     }
  18.  
  19.  
  20.   }
  21. }

n°158763
greg@frees​tarthu
Posté le 13-06-2002 à 17:13:54  profilanswer
 

veryfree a écrit a écrit :

[...]



 
avec quoi i vient lui :D 4h après, alors qu'on a déjà tout donné au gringo ! :-)
faut taper plus vite petit scarabée:lol:

n°158875
benou
Posté le 13-06-2002 à 18:30:35  profilanswer
 

avec quelques heures de retard...
 
Si tu tiens à avoir une message d'earreur plus clair, tu peux aussi modifier la méthode toString() à l'exception de dark :
 

Code :
  1. public JDataException extends Exception {
  2.    
  3.      private SQLException nested = null;
  4.      
  5.      public JDataException (String msg) {
  6.         super(msg);
  7.      }
  8.      
  9.      public JDataException (String msg, SQLException exception) {
  10.         super(msg);
  11.         nested = exception;
  12.      }
  13.      
  14.      public SQLException getNestedException() {
  15.         return nested;
  16.      }
  17.      public String toString() {
  18.          return super.toString() + " - Erreur sql : Code Erreur: " + nested.getErrorCode()
  19.      }
  20.   }


Message édité par benou le 13-06-2002 à 18:31:12
n°158879
veryfree
Posté le 13-06-2002 à 18:35:28  profilanswer
 

ok

n°159112
El_gringo
Posté le 14-06-2002 à 08:41:31  profilanswer
 

DarkLord a écrit a écrit :

si c'est pour ca utilise le code de gregg qui fait ce que tu veux mais fait qd meme e.getErrorCode() :D  




 
merci, j'avais vu qd même pour le e
Darklord, Benou; ça fait combien de temps que vous faites du Java ? Parce que, pour l'instant, j'en chierai bien sans le forum. Je suis curieux de savoir ds combien de temps je serais autonome (ou du moins beaucoup + que maintenant). En C/C++, g mis environ 6, 7 mois. (là, je peux dire que je le suis)

n°159113
El_gringo
Posté le 14-06-2002 à 08:43:46  profilanswer
 

veryfree a écrit a écrit :

voila un exemple
en fait faut utiliser throws New Execption
 

Code :
  1. public class NotALetterException extends Exception {
  2.   static int count=0;
  3.   String msg;
  4.  
  5.  
  6.   public NotALetterException(String s) {
  7.     msg = s;
  8.   }
  9.  
  10.   public static void countLetter(char c) throws NotALetterException {
  11.  
  12.     if (Character.isJavaLetter(c)) {
  13.       count++;
  14.     }
  15.     else {
  16.       throw new NotALetterException(c + " is not a letter" );
  17.     }
  18.  
  19.  
  20.   }
  21. }

 




 
Hein !? là, je t'avoue que je comprend pas du tout ou tu veux en venir ! Je vois pas le rapport avec ce que je voulais faire en fait...

n°159114
darklord
You're welcome
Posté le 14-06-2002 à 08:46:38  profilanswer
 

c'est vrai que la classe de verry est très bizarre en fait elle contient l'exception et un exemple de balancement d'exception ;)
 
bref sinon pour répondre à ta question, je développe en Java depuis presque 3 ans maintenant.
 
A+


---------------
Just because you feel good does not make you right
n°159132
benou
Posté le 14-06-2002 à 09:11:04  profilanswer
 

el_gringo a écrit a écrit :

 
Darklord, Benou; ça fait combien de temps que vous faites du Java ? Parce que, pour l'instant, j'en chierai bien sans le forum. Je suis curieux de savoir ds combien de temps je serais autonome (ou du moins beaucoup + que maintenant).



 
ben moi j'ai pas temps d'expérience que ca en Java : J'ai fait un projet de fin d'année en Java/Corba. C'est là que je me suis mit à bien aimer ce langage.
ensuite, j'en ai fait un peu en DESS mais pas beaucoup. Et puis ca fait un an que je bosse et que je fait principalement du Java.
Donc, je fais du Java depuis environ 3 ans, mais pas à 100% du temps. En cumulant, je dois en avoir fait pdt 8 ou 10 mois...

n°159191
El_gringo
Posté le 14-06-2002 à 10:46:00  profilanswer
 

Hé, g encore une question sur les exceptions:
ça sert juste à signaler les erreurs, ou plus que ça ?
Genre, au début de ma servlet, l'utilisateur doit se logger.
Le log peut échouer parce qu'on arrive pas à lire la tables des utilisateurs enregistrés, ds ce cas, je lance une exception (qui sera au final une ServletException). Mais, si le mot de passe est mauvais par exemlpe, il faut que j'utilise une exception aussi ? (en tt cas, ça devra pas être une ServletException, ça, c sur !)

n°159192
benou
Posté le 14-06-2002 à 10:48:21  profilanswer
 

moi dans ce cas la, j'utiliserai pas une exception : un echec de login c'est un évenement normal ... ca a rien "d'exceptionel". Ca remet pas en cause le fonctionnement de ton application.  
Donc, non, moi j'utiliserai pas d'exception pour ca.

n°159199
El_gringo
Posté le 14-06-2002 à 10:53:56  profilanswer
 

benou a écrit a écrit :

moi dans ce cas la, j'utiliserai pas une exception : un echec de login c'est un évenement normal ... ca a rien "d'exceptionel". Ca remet pas en cause le fonctionnement de ton application.  
Donc, non, moi j'utiliserai pas d'exception pour ca.  




 
ha, ok. J'utiliserai plutot une valeur de retour alors

n°159202
greg@frees​tarthu
Posté le 14-06-2002 à 10:57:24  profilanswer
 

benou a écrit a écrit :

moi dans ce cas la, j'utiliserai pas une exception : un echec de login c'est un évenement normal ... ca a rien "d'exceptionel". Ca remet pas en cause le fonctionnement de ton application.  
Donc, non, moi j'utiliserai pas d'exception pour ca.  




grand sujet de controverses que celui-ci :)
(j'ai pas dit que j'étais pas d'accord dans ce cas-ci:-))

n°159204
darklord
You're welcome
Posté le 14-06-2002 à 10:58:44  profilanswer
 

greg@freestarthu a écrit a écrit :

 
grand sujet de controverses que celui-ci :)
(j'ai pas dit que j'étais pas d'accord dans ce cas-ci:-))  




 
ca dépend qui la catches et où tu la catches. Et ca dépend des conséquences de ce catch.


Message édité par darklord le 14-06-2002 à 10:59:17

---------------
Just because you feel good does not make you right
n°159205
benou
Posté le 14-06-2002 à 11:00:04  profilanswer
 

greg@freestarthu a écrit a écrit :

 
grand sujet de controverses que celui-ci :)
(j'ai pas dit que j'étais pas d'accord dans ce cas-ci:-))  




ouaip. C'est jamais très facile à décider ce genre de truc ...


Message édité par benou le 14-06-2002 à 11:00:12
n°159209
benou
Posté le 14-06-2002 à 11:02:36  profilanswer
 

DarkLord a écrit a écrit :

 
ca dépend qui la catches et où tu la catches. Et ca dépend des conséquences de ce catch.  




[:yaisse]
Je pense que dans la majorité des cas, une exception doit être générée quand on est plus capable d'executer correctement une tache.
 
Toi, si la tache en question, c'est de vérifier que le login est correct, le fait de voir qu'il est incorrecte et "normal" => pas d'exception. (enfin c'est ma façon de voir)

n°159217
greg@frees​tarthu
Posté le 14-06-2002 à 11:08:24  profilanswer
 

benou a écrit a écrit :

 
[:yaisse]
Je pense que dans la majorité des cas, une exception doit être générée quand on est plus capable d'executer correctement une tache.
 
Toi, si la tache en question, c'est de vérifier que le login est correct, le fait de voir qu'il est incorrecte et "normal" => pas d'exception. (enfin c'est ma façon de voir)  




 

mais par exemple
...
t'as une chaine qui vient d'un fichier de config ou d'un champ texte
... et ça DOIT etre un entier... t'as une autre solution que de catcher le NumberFormatException meme si c'est "normal" que ton user ait pu rentrer une lettre par erreur dans le formulaire ? :)

n°159221
veryfree
Posté le 14-06-2002 à 11:14:06  profilanswer
 

el_gringo a écrit a écrit :

 
 
Hein !? là, je t'avoue que je comprend pas du tout ou tu veux en venir ! Je vois pas le rapport avec ce que je voulais faire en fait...  




 
 
+jve t embrouillé plus dans ce cas :/

n°159241
benou
Posté le 14-06-2002 à 11:27:00  profilanswer
 

greg@freestarthu a écrit a écrit :

 

mais par exemple
...
t'as une chaine qui vient d'un fichier de config ou d'un champ texte
... et ça DOIT etre un entier... t'as une autre solution que de catcher le NumberFormatException meme si c'est "normal" que ton user ait pu rentrer une lettre par erreur dans le formulaire ? :)  




 
à mon avis :  
- si ca vient d'un fichier de config, tu catches le NumberFormatException tu créé une nouvelle exception ConfigurationException (avec le nom du fichier et le champs en erreur), et tu mets le NumberFormatException dedans (nested)
 
- si ca vient d'un champs, la vérification doit être fait au moment de la saisie ou de la validation. Une mauvaise saisie c'est un fonctionnement classique => tu dois la traiter avant de commencer le réél traitement => pas besoin d'exception : tu affiche un message d'erreur à l'utilisateur et tu annule le traitement métier.
 
enfin tout ca, ca dépend de la façon de voir de chacun ...

n°159255
El_gringo
Posté le 14-06-2002 à 11:38:59  profilanswer
 

veryfree a écrit a écrit :

 
 
 
+jve t embrouillé plus dans ce cas :/  




 
dsl, merci qd même !

n°159268
greg@frees​tarthu
Posté le 14-06-2002 à 11:50:42  profilanswer
 

benou a écrit a écrit :

 
 
à mon avis :  
- si ca vient d'un fichier de config, tu catches le NumberFormatException tu créé une nouvelle exception ConfigurationException (avec le nom du fichier et le champs en erreur), et tu mets le NumberFormatException dedans (nested)




tout a fait
 

Citation :

- si ca vient d'un champs, la vérification doit être fait au moment de la saisie ou de la validation. Une mauvaise saisie c'est un fonctionnement classique => tu dois la traiter avant de commencer le réél traitement => pas besoin d'exception : tu affiche un message d'erreur à l'utilisateur et tu annule le traitement métier.


 
oui mais comment tu verifie que justement il n'y a que des digits? bon oui, y'a des isDigit() methodes un peu partout... mais c tellement plus simple de faire le parseInt() dans un try/catch  :ange:  :ange: :D

n°159278
benou
Posté le 14-06-2002 à 11:55:29  profilanswer
 

greg@freestarthu a écrit a écrit :

 
oui mais comment tu verifie que justement il n'y a que des digits? bon oui, y'a des isDigit() methodes un peu partout... mais c tellement plus simple de faire le parseInt() dans un try/catch  :ange:  :ange: :D  




ben bien sur que tu fais un parseInt ... pkoi pas en faire ?
moi je parlais des cas où il faut déclencher ou non une exception. Là y a pas le choix : l'api java est faite comme ca ...

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [Java] pb avec les Exceptions

 

Sujets relatifs
[java - applet] comment traduire "trusted" applet en français ?[Java - Servlets] Utilisation des sessions
comment installer java sous linux?[java] need help
[java/Math] formule encore :-)[Java] Socket + Timeout + buffer en sortir
Java et Langage C[Java]Comment desactiver le garbage collector ?
[JAVA] Lecture d'un fichier texteJava et les exceptions
Plus de sujets relatifs à : [Java] pb avec les Exceptions


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR