[Java] pb avec les Exceptions

pb avec les Exceptions [Java] - Programmation

Marsh Posté le 13-06-2002 à 16:17:50    

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
Reply

Marsh Posté le 13-06-2002 à 16:17:50   

Reply

Marsh Posté le 13-06-2002 à 16:20:37    

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
Reply

Marsh Posté le 13-06-2002 à 16:21:54    

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
Reply

Marsh Posté le 13-06-2002 à 16:23:36    

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à... :(

Reply

Marsh Posté le 13-06-2002 à 16:23:38    

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
Reply

Marsh Posté le 13-06-2002 à 16:24:13    

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é !

Reply

Marsh Posté le 13-06-2002 à 16:25:08    

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
Reply

Marsh Posté le 13-06-2002 à 16:25:36    

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
Reply

Marsh Posté le 13-06-2002 à 16:26:42    

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)

Reply

Marsh Posté le 13-06-2002 à 16:27:33    

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)

Reply

Marsh Posté le 13-06-2002 à 16:27:33   

Reply

Marsh Posté le 13-06-2002 à 16:29:29    

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.

Reply

Marsh Posté le 13-06-2002 à 16:30:49    

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...

Reply

Marsh Posté le 13-06-2002 à 16:33:07    

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. :-)

Reply

Marsh Posté le 13-06-2002 à 16:41:17    

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
Reply

Marsh Posté le 13-06-2002 à 16:41:41    

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
Reply

Marsh Posté le 13-06-2002 à 16:45:58    

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] )

Reply

Marsh Posté le 13-06-2002 à 16:48:55    

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
Reply

Marsh Posté le 13-06-2002 à 17:01:11    

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. }

Reply

Marsh Posté le 13-06-2002 à 17:13:54    

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:

Reply

Marsh Posté le 13-06-2002 à 18:30:35    

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
Reply

Marsh Posté le 13-06-2002 à 18:35:28    

ok

Reply

Marsh Posté le 14-06-2002 à 08:41:31    

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)

Reply

Marsh Posté le 14-06-2002 à 08:43:46    

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...

Reply

Marsh Posté le 14-06-2002 à 08:46:38    

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
Reply

Marsh Posté le 14-06-2002 à 09:11:04    

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...

Reply

Marsh Posté le 14-06-2002 à 10:46:00    

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 !)

Reply

Marsh Posté le 14-06-2002 à 10:48:21    

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.

Reply

Marsh Posté le 14-06-2002 à 10:53:56    

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

Reply

Marsh Posté le 14-06-2002 à 10:57:24    

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:-))

Reply

Marsh Posté le 14-06-2002 à 10:58:44    

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
Reply

Marsh Posté le 14-06-2002 à 11:00:04    

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
Reply

Marsh Posté le 14-06-2002 à 11:02:36    

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)

Reply

Marsh Posté le 14-06-2002 à 11:08:24    

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 ? :)

Reply

Marsh Posté le 14-06-2002 à 11:14:06    

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 :/

Reply

Marsh Posté le 14-06-2002 à 11:27:00    

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 ...

Reply

Marsh Posté le 14-06-2002 à 11:38:59    

veryfree a écrit a écrit :

 
 
 
+jve t embrouillé plus dans ce cas :/  




 
dsl, merci qd même !

Reply

Marsh Posté le 14-06-2002 à 11:50:42    

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

Reply

Marsh Posté le 14-06-2002 à 11:55:29    

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 ...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed