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

Développement Web en Java Discussion :

Problème date provenant de MySQL


Sujet :

Développement Web en Java

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut Problème date provenant de MySQL
    Bonjour, je développe une application en MVC en Java J2E et j'ai un problème avec mes dates.
    Voici l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    java.lang.IllegalArgumentException: Cannot format given Object as a Date
    	java.text.DateFormat.format(Unknown Source)
    	java.text.Format.format(Unknown Source)
    	fr.intranet.bdd.CongesDAO.getCongesUserAccueil(CongesDAO.java:79)
    	fr.intranet.servlets.Accueil.doGet(Accueil.java:32)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    Code de ma classe CongesDAO:
    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
    public List<Conges> getCongesUserAccueil(int idUser){
    		List<Conges> lesConges = new ArrayList<Conges>();
    	        SimpleDateFormat formater = new SimpleDateFormat("dd-MM-yyyy");
    		try{
    			statement = unAcces.connexionBdd().createStatement();
    			resultat = statement
    					.executeQuery("SELECT Conges.id As idConges, Users.id As idUser, Users.nom As nom, prenom, fonction, typeConges, depot, dateDbt, dateFin, statut, dateAction"
    							+ "		FROM Conges"
    							+ "		LEFT JOIN Users ON Users.id = Conges.users_id"
    							+ "		WHERE Users.id ="+idUser
    							+ "		ORDER BY depot desc");
     
    			while(resultat.next()){
    				Conges conge = new Conges();
    				Users user = new Users();
    				user.setId(resultat.getInt("idUser"));
    				user.setNom(resultat.getString("nom"));
    				user.setPrenom(resultat.getString("prenom"));
    				user.setFonction(resultat.getString("fonction"));
    				conge.setUsers(user);
    				conge.setId(resultat.getInt("idConges"));
    				conge.setTypeConges(resultat.getString("typeConges"));
    				conge.setDepot(resultat.getDate(formater.format("depot")));
    				conge.setDateDbt(resultat.getDate(formater.format("dateDbt")));
    				conge.setDateFin(resultat.getDate(formater.format("dateFin")));
    				conge.setStatut(resultat.getString("statut"));
     
    				lesConges.add(conge);
    			}
    		}catch (SQLException e) {
    			e.getMessage();
    		} finally {
    			unAcces.deconnexionBdd(resultat, statement);
    		}
     
    		return lesConges;
    	}
    Dans mon model les date sont au formate Date

    Merci de votre aide

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Dans cette ligne conge.setDateDbt(resultat.getDate(formater.format("dateDbt"))); tu passes le nom de colonne, un String à la méthode format, alors que la méthode format de SimpleDateFormat prend un java.util.Date en entrée et donne un String en sortie.

    La question que je me pose est pourquoi formater une date ici. La classe Conges stocke-t-elle la date en type String ? Ce n'est pas une bonne solution : elle devrait stocker la date en java.util.Date, afin de pouvoir faire des traitements de date ensuite. Au dernier moment, lorsqu'on veut l'afficher, on la formate.

    Dans ton code, en fait, tu essayes de formater le nom de la colonne avec un format de date, ce qui n'est évidemment pas possible. Si tu veux vraiment que la date soit stockée en String, il faut lire la date et la formater ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    conge.setDateDbt(formater.format(resultat.getDate("dateDbt")));
    Autre possibilité, la date est stockée en String dans la base, ce qui n'est pas non plus une bonne idée, puisque ça empêche de faire des tris ou des filtres (where) selon les dates, mais bon si c'est le cas, ce n'est pas un format qu'il faut faire, mais un parse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Date dateDbt = formater.parse(resultat.getDate("dateDbt"));

    Même chôse pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    conge.setDateFin(resultat.getDate(formater.format("dateFin")));
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Mes date sont au formate date dans ma base mais au formate annee - jours - mois ou annee - mois - jours (je sais plus trop) et je souhaiterais les mettre en jours - mois - année

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Qu'est ça veut dire que les dates soient au format date ? Un champ de table a un type : date, datetime, varchar... En varchar, on peut utiliser un format pour l'afficher. Le fait que tu voies les valeurs de date en consultant les données de la base, avec je ne sais quoi, sous forme année-mois-jour ou autre ne veut pas dire qu'il s'agisse forcément d'un type chaîne de caractères.

    L'important c'est le type du champ dans la table de la base : quel est t-il ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Dans ma base, c'est au format date année - mois - jours et je souhaite convertir en jours - mois - année pour un affichage plus correct

  6. #6
    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 totot Voir le message
    Mes date sont au formate date dans ma base
    dans ce cas tu utilise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resultat.getDate("dateDbt")
    Parce que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resultat.getDate(formater.format("dateDbt"))
    Ca n'a ni queue ni tête cette commande et c'est symptomatque de quelqu'un qui essaie de mettre du code dans tous les sens en espérant que ça marche. J'ai l'impression que tu ne maitrise pas les bases du langage java. Ce n'est pas un problème en soit, on a tous débuté, mais c'est une extrèmement mauvaise idée de faire du développement web en java sans avoir d'abord la maitrise du langage.


    Citation Envoyé par totot Voir le message
    mais au formate annee - jours - mois ou annee - mois - jours
    Que ce soit en java ou en SQL, une date ça n'a pas de format. Seule une chaine de caractère à un format.

  7. #7
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Oui mais moi je voudrais un affiche en version française et non mySql

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par totot Voir le message
    Dans ma base, c'est au format date année - mois - jours et je souhaite convertir en jours - mois - année pour un affichage plus correct
    Ça ne répond pas à ma question : quel est le type de la colonne ?

    Je devine que si tu parles de format, le type est varchar, et les valeurs ont la forme année - mois - jour : dans ce cas, il faut utiliser getString() pour récuperer la valeur du champ dans le resultSet. Et utiliser 2 SimpleDateFormat, par exemple, pour convertir de année - mois - jour vers jour - mois - année : un SimpleDateFormat pour convertir la String en Date (parser), et un pour formater la date dans le format final. Là aussi il faut aussi être plus précis : année - mois - jour n'est pas un format, YYYY - MM - dd, en est un. A noter, que tu peux également parser ta String vers un LocalDateTime en Java8.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Ma colonne est de type Date

  10. #10
    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 totot Voir le message
    Oui mais moi je voudrais un affiche en version française et non mySql
    Il n'y a pas de "version" à une Date. une Date, c'est une Date. Point. C'est uniquement quand tu l'afficher (conversion en String) que le formatage interviens.

  11. #11
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par totot Voir le message
    Ma colonne est de type Date
    Donc elle n'a pas de format dans la base. Maintenant, le but du format c'est d''afficher la date : stocke l'information dans la classe Conges en java.util.Date. Tu n'a plus donc qu'a faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    conges.setDateDbt(resultat.getDate("dateDbt");
    Ensuite dans ta JSP, tu pourras la formater, avec un SimpleDateFormat("dd - MM - yyyy").
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  12. #12
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Dans ma jsp j'ai fait comme sa mais sa fonctionne pas pour changer le format de la date:
    SimpleDateFormat formater = new SimpleDateFormat("dd-MM-yyyy");
    formater.format(conges.getDepot())

  13. #13
    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
    On ne change pas le format d une date puisque cela n a pas de format. La methode format te retourne une String, tu en fais quoi?

  14. #14
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Je souhaite l'afficher en format jours mois année

  15. #15
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    J'ai essayer de refaire ma requête comme je l'avais dans mon application PHP mais elle affiche rien comme résultat dans mon application en java alors qu'elle fonctionne très bien aussi directement dans mySql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Select conges.id As idConges, users.id As idUser, users.nom As nom, prenom, fonction, typeConges, DATE_FORMAT(depot,'%d/%m/%Y') As depot, DATE_FORMAT(dateDbt,'%d/%m/%Y') As dateDbt, DATE_FORMAT(dateFin,'%d/%m/%Y') As dateFin, statut, DATE_FORMAT(dateAction,'%d/%m/%Y') As dateAction, commentaires
                                                From conges
                                                left Join users On users.id = conges.users_id
                                                where statut = 'En attente' or statut = 'Annulé'
                                                Order by depot desc"

  16. #16
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Jusqu'à maintenant, tu voulais formater des champs de type date, et, là, tu formates ces champs dans la requête SQL : du coup, ça n'est plus des dates, mais des chaînes de caractères, qu'on récupère avec getString() et pas getDate(), ce que tu n'as pas changé probablement, d'où une erreur qui fais que tu obtiens un résulat vide, et, ce, sans message d'exception, parce que dans ton catch, tu récupères le message de l'exception, mais tu n'en fais rien, même pas l'afficher. Je t'ai indiqué de conserver le type date le plus longtemps, afin de pouvoir t'en servir en tant que date (sans avoir à faire des manipulations de conversion (parsing et formatage) dans tous les sens), et de formater juste au moment de l'affichage, ce que tu fais en plus dans une autre discussion...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] problème date php/mysql : 0000-00-00 00:00:00
    Par ths_otraa dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 13/02/2008, 12h09
  2. Problème d'insertion ( équivalence mysql )
    Par syl2095 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 03/12/2004, 17h35
  3. [Date] Comparer des dates au format mySQL "date
    Par Marc_P dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 25/10/2004, 15h15
  4. Problème d'utilisation de Mysql avec dev-c++
    Par Watchi dans le forum Dev-C++
    Réponses: 10
    Dernier message: 06/08/2004, 14h35
  5. Problème d'insertion avec MySQL
    Par Sonny dans le forum ASP
    Réponses: 13
    Dernier message: 28/08/2003, 13h52

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