IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Unhandled exception type Exception


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 63
    Points : 33
    Points
    33
    Par défaut Unhandled exception type Exception
    Bonjour à tous,

    Je suis novice en POO bien qu'ayant un peu de base.
    Je fais un programme pour m'exercer et j'ai un soucis pour la conversion de dates.
    Encore ces S... de dates qui font perdre du temps dans n'importe quel langage.

    Le script que j'utilise pour la conversion provient d'une FAQ JAVA de ce site.
    J'ai retiré le mot-clé "static" de la méthode pour supprimer une erreur
    (je ne sais pas encore pourquoi elle était présente).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public Date stringToDate(String sDate, String sFormat) throws Exception{
     
    	SimpleDateFormat sdf = new SimpleDateFormat(sFormat);
    	return sdf.parse(sDate);		
    }
    Voici ma class:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    import java.util.Locale;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class People {
    
    	private String name;
    	private String firstName;
    	private int age;
    	private Date dateOfBorn;
    	private Date dateOfDeath;
    	private String nationality;
    
    	
    	/*	GETTER & SETTER	*/
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	
    	public Date getDateOfBorn() {
    		return dateOfBorn;
    	}
    	public void setDateOfBorn(String dateOfBorn) {
    		this.dateOfBorn = this.stringToDate(dateOfBorn, "dd-mm-yy");	
                    // Ligne en erreur.
    	}
    	
    	public Date getDateOfDeath() {
    		return dateOfDeath;
    	}
    	public void setDateOfDeath(Date dateOfDeath) {
    		this.dateOfDeath = dateOfDeath;
    	}
    	
    	public String getFirstName() {
    		return firstName;
    	}
    	public void setFirstName(String firstName) {
    		this.firstName = firstName;
    	}
    	
    	public String getName() {
    		return name;
    	}	
    	public void setName(String name) {
    		this.name = name;
    	}
    	
    	public String getNationality() {
    		return nationality;
    	}
    	public void setNationality(String nationality) {
    		this.nationality = nationality;
    	}
    	
    	
    	/*	Constructeur	*/
    	public People(String name, String firstName, int age, Date dateOfBorn, Date dateOfDeath, String nationality){
    		
    		this.age = age;
    		this.dateOfBorn = dateOfBorn;
    		this.dateOfDeath = dateOfDeath;
    		this.firstName = firstName;
    		this.name = name;
    		this.nationality = nationality;
    	}
    	
           public People(){
    	}
    		
    	
    	/*	Méthodes	*/
    	public static Date stringToDate(String sDate, String sFormat) throws Exception{
            		
    		SimpleDateFormat sdf = new SimpleDateFormat(sFormat);
    		return sdf.parse(sDate);		
    	}	
    }
    Voici le main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
     
    public class Main {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
     
     
    		People actor1 = new People();
    		actor1.setAge(28);
    		actor1.setDateOfBorn("10/05/1980");
    		actor1.setFirstName("paul");
    		actor1.setName("durant");
    		actor1.setNationality("fr");
     
    		System.out.println("Acteur 1:"+
    				"\n\nnom: "+ actor1.getName() +
    				"\nprénom: "+  actor1.getFirstName() +						
    				"\nage: "+ actor1.getAge() +
    				"\ndate naissance: "+ actor1.getDateOfBorn() +
    				"\ndate décé: "+ actor1.getDateOfDeath() +
    				"\nnationalité: "+ actor1.getNationality());
    	}
     
    }
    Merci pour l'aide et la compréhension que vous pourrez m'apporter.

  2. #2
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    salut,

    Ce ne sont pas les dates qui te font perdre du temps, mais le mécanisme d'exception.
    Comme la méthode de parse remonte une exception potentielle, il est nécessaire de catcher cette exception à l'appel de la méthode.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try {
    	this.dateOfBorn = People.stringToDate(dateOfBorn, "dd-mm-yy");
    } catch (Exception e) {
    	// je decide ici ce que je fait si une exception est levée
    }
    Enfin comme la méthode est static, on fait un appel static :

  3. #3
    Membre actif

    Inscrit en
    Octobre 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 133
    Points : 295
    Points
    295
    Par défaut
    Tes formats n'ont pas l'air de concorder entre ton main et ton simpledateformat.

    Dans ton main, tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    actor1.setDateOfBorn("10/05/1980");
    Tu t'attends a créer une date du style dd/MM/yyyy

    Tu créés ton SimpleDateFormat du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.stringToDate(dateOfBorn, "dd-mm-yy");
    Tu t'attends donc a recevoir une date de style dd-mm-yy

    Les 2 formats sont incohérents et tu as donc une exception.
    Pour que cela fonctionne, il faut changer l'un des deux formats (soit celui dans le main et écrire 10-05-80, soit écrire le format du style dd/MM/yyyy dans ta methode setDateOfBorn).
    Je te conseilles vivement la 2eme solution pour avoir une certitude sur ton année.

    Je te conseilles aussi de mettre un try/catch dans ta méthode stringToDate pour gérer directement l'exception (je la mettrais aussi dans une classe utilitaire en créant le format de manière statique mais tu n'en a pas réellement besoin pour t'exercer)

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par visiwi Voir le message
    salut,

    Ce ne sont pas les dates qui te font perdre du temps, mais le mécanisme d'exception.
    Comme la méthode de parse remonte une exception potentielle, il est nécessaire de catcher cette exception à l'appel de la méthode.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try {
    	this.dateOfBorn = People.stringToDate(dateOfBorn, "dd-mm-yy");
    } catch (Exception e) {
    	// je decide ici ce que je fait si une exception est levée
    }
    Enfin comme la méthode est static, on fait un appel static :
    Cela fonctionne bien.
    Et j'ai compris à quoi pouvais servir le mot "static".

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par henolivier Voir le message
    Tes formats n'ont pas l'air de concorder entre ton main et ton simpledateformat.

    Dans ton main, tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    actor1.setDateOfBorn("10/05/1980");
    Tu t'attends a créer une date du style dd/MM/yyyy

    Tu créés ton SimpleDateFormat du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.stringToDate(dateOfBorn, "dd-mm-yy");
    Tu t'attends donc a recevoir une date de style dd-mm-yy

    Les 2 formats sont incohérents et tu as donc une exception.
    Pour que cela fonctionne, il faut changer l'un des deux formats (soit celui dans le main et écrire 10-05-80, soit écrire le format du style dd/MM/yyyy dans ta methode setDateOfBorn).
    Je te conseilles vivement la 2eme solution pour avoir une certitude sur ton année.

    Je te conseilles aussi de mettre un try/catch dans ta méthode stringToDate pour gérer directement l'exception (je la mettrais aussi dans une classe utilitaire en créant le format de manière statique mais tu n'en a pas réellement besoin pour t'exercer)
    En effet, les deux format posent problème.
    Merci pour la correction.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Maintenant, j'ai un autre soucis.
    Ca à pourtant l'aire de fonctionner ailleurs, mais pas chez moi

    ma date saisie est "10-05-1980",
    mais le programme me retourne "Thu Jan 10 00:05:00 GMT+01:00 1980"
    Soit "10-01-1980"

    ???????????????????????
    D'où vient le soucis ?

  7. #7
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    henolivier t'as donnée la solution : dd/MM/yyyy ou dd-MM-yyyy suivant la cas que tu as retenu.

  8. #8
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Sur la javadoc de SimpleDateFormat, tu vois que m correspond au minute, tandis que M correspond au mois.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Ok, dsl.
    Merci pour l'éclaircissement.

    Faut que je face gaffe à la casse.
    Après plus d'un an à faire des applications web pour l'intranet de mon ancien
    job, pas habituer avec javascript qui ce fou de la casse.

    Ca fonctionne déjà mieux comme ça.
    Par contre ce qui m'interpelle, c'est le format retourné.
    Par exemple, avec un champ d'une table en smalldatetime, soit "dd-mm-yyyy hh:mm:ss"
    et le tout en chiffre, comment la chaine retournée par le programme peut
    elle être intégrée dans la base?
    Faut-il faire autre chose ?

  10. #10
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Par exemple, avec un champ d'une table en smalldatetime, soit "dd-mm-yyyy hh:mm:ss"
    et le tout en chiffre, comment la chaine retournée par le programme peut
    elle être intégrée dans la base?
    Faut-il faire autre chose ?
    Je comprends pas bien la question. Cela concerne quel domaine, le parse d'une date en chaine suivant un certain format ou ajouter des données dans ta bdd avec Java ? Peux-tu être plus précis ?

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    La parse de la date nous donne "Sat May 10 00:00:00 GMT+02:00 1980"
    Comment la bas de donnée peut-elle accepter cela lors que le champ concerné est de type
    samlldatetime (par exemple) et ne peut recevoir que des valeur comme "10-05-1980 00:00:00" ?

  12. #12
    Membre chevronné Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Points : 2 232
    Points
    2 232
    Par défaut
    Ce qu'il faut que tu comprenne c'est qu'un objet Date n'a pas de format. Il a un mois, une année,... mais pas de format spécifié.
    Ce qui a un format c'est la chaine de caractère qui résulte du formatage de ta Date.
    Globalement tu fais ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    Date d = sdf.parse("11/09/1986");
    ça te transforme une chaine en date. Si tu veux retrouver ta chaine tu ne dois pas faire
    comme tu as fais (dans ce cas ça utilise le formatage par défaut et ça donne "Sat May 10 00:00:00 GMT+02:00 1980").
    Il faut que tu la formate en utilisant le SimpleDateFormat dans l'autre sens
    autant l'hiver éclate que l'hétéroclite
    le vrai geek c'est celui qui croit qu'il y a 1024 mètres dans un kilomètre

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Pour ravoir la date en type string j'ai trouvé.
    J'ai fait autrement mais ça fonctionne.
    Hors mis le fait que des "." remplace les "-".
    Mais ce n'est pas trop grave.

    je que je voulais dire c'est pour intégrer la date dans une base de donnée (je pense à SQL server surtout, connais pas trop MySQL) où le champ de la date et typé en smalldatetime et donc ne peut recevoir de String.
    Et je me posais la question si ce champ pouvait recevoir le format de la date renvoyer par la méthode, soit "Sat May 10 00:00:00 GMT+02:00 1980".

    Sinon, que faut-il faire pour que cette méthode retourne une date au bon format,
    soit "10-05-1980 00:00:00".

  14. #14
    Membre chevronné Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Points : 2 232
    Points
    2 232
    Par défaut
    Il faut que tu la formate correctement en utilisant le SimpleDateFormat (en adaptant le pattern au format que tu attend).
    Le lien vers la javadoc de cette classe t'as été donné plus haut. Va voir tu trouvera ce qui te faut pour composer le bon pattern.
    autant l'hiver éclate que l'hétéroclite
    le vrai geek c'est celui qui croit qu'il y a 1024 mètres dans un kilomètre

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    J'y avais déjà jeté un œil, mais je suis pas très doué en anglais.
    Déjà que faire "mumuse" avec les dates je trouve pas cela très simple,
    avec une aide en anglais ...

    Bref ...

    Je vais essayer de comprendre mais c'est pas gagné.
    Surtout que le peut que j'en ai compris, ne m'aide pas plus.

  16. #16
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Citation Envoyé par mickael28 Voir le message
    Et je me posais la question si ce champ pouvait recevoir le format de la date renvoyer par la méthode, soit "Sat May 10 00:00:00 GMT+02:00 1980"
    Probablement que non puisque plus haut tu dit que le format de ce type est "dd-mm-yyyy hh:mm:ss". Tu doit donc convertir ta date en une chaîne respectant ce pattern.
    Citation Envoyé par mickael28 Voir le message
    Sinon, que faut-il faire pour que cette méthode retourne une date au bon format, soit "10-05-1980 00:00:00"
    guigui5931 t'as donné toutes les infos. Tu peux toujours allez voir sur la FAQ, mais cela ne t'apprendra rien de plus. Utilise une instance de SimpleDateFormat avec le bon pattern ("dd-MM-yyyy hh:mm:ss" je pense) et ensuite tu appel la méthode format(Date).

  17. #17
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Tu sais, pour communiquer avec une base de données, tu ne t'occupes pas des formats de données.

    Tu passeras par JDBC, en construisant un template de ta requête SQL, et en passant tes variables int, long, String, Date, etc ; directement au template, laissant le driver JDBC se charger de transformer ça en un format qui lui plaît.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  18. #18
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par mickael28 Voir le message
    La parse de la date nous donne "Sat May 10 00:00:00 GMT+02:00 1980"
    Comment la bas de donnée peut-elle accepter cela lors que le champ concerné est de type
    samlldatetime (par exemple) et ne peut recevoir que des valeur comme "10-05-1980 00:00:00" ?
    comme déjà dit, le parse te retourne un objet Date, pas un string, donc son affichage n'a aucune importance. Ensuite, tu va, coté jdbc, (voir dans les FAQs) utiliser des preparedStatements, qui on le forme, par exemple "select * from matable where birthDate=:1". Tu aura juste après à faire des appels comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preparedStatement.setDate(1,maDateParsee);
    et tu laisse ainsi le connecteur envoyer la date dans le format propriétaire de la DB.

Discussions similaires

  1. erreur : Unhandled exception type InterruptedException
    Par the watcher dans le forum Langage
    Réponses: 1
    Dernier message: 24/11/2010, 13h10
  2. [Debutant] ]Unhandled exception type : c'est quoi ?
    Par junior68 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 30/03/2009, 22h36
  3. Réponses: 1
    Dernier message: 30/05/2007, 16h46
  4. Exception type mismatch
    Par khayri dans le forum Struts 1
    Réponses: 2
    Dernier message: 28/12/2006, 14h08
  5. [Debutant] Erreur "Unhandled event loop exception"
    Par pilz dans le forum Eclipse Platform
    Réponses: 14
    Dernier message: 08/12/2004, 15h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo