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

JDBC Java Discussion :

incompatibilité des types date entre java et sql !


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 64
    Par défaut incompatibilité des types date entre java et sql !
    Bonjour tout le monde !!!

    J'ai un gros problème avec un champs de type date que je récupère à partir d'un formulaire pour l'insérer dans ma base MySQL.
    Voilà ce que je fais, je récupère la chaine de caractère "dateDebut " à partir de mon formulaire, ensuite je crée un modèle de date dans lequel je renvoie ce qu'il y a dans ma date début :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    String dateDebut = request.getParameter("dateDebut");
    	SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
    	Date date_commande = null;
    	        try {
    	        	date_commande = (Date) formatter.parse(dateDebut);
    	        	} 
    	        catch (java.text.ParseException ex) {
    	            ex.printStackTrace();
    	        }
    sauf qu'une fois que je fais l'insertion dans ma base, j'ai l'erreur suivante comme quoi y a une incompatibilité entre le type date de java et celui de sql

    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
     
    org.apache.jasper.JasperException: Exception in JSP: /devis.jsp:13
     
    10: 	SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
    11: 	Date date_commande = null;
    12: 	        try {
    13: 	        	date_commande = (Date) formatter.parse(dateDebut);
    14: 	        	} 
    15: 	        catch (java.text.ParseException ex) {
    16: 	            ex.printStackTrace();
     
     
    Stacktrace:
    	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:504)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
     
     
    cause mère 
     
    java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date
    	org.apache.jsp.devis_jsp._jspService(devis_jsp.java:65)
    	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    auriez vous une idée de la solution ??
    je vous remercie d'avance !!!!!

  2. #2
    Membre expérimenté Avatar de aperrin
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 221
    Par défaut
    Pour la base il faut que ta date soit du type java.sql.Date

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 64
    Par défaut
    ben dans ma base MySQL le champs est de type DATE tout simplement, normalement ça devrait aller, sauf si sql supporte un autre type date genre "YYYY-MM-DD", et là je vois pas comment changer ça !!!

  4. #4
    Membre expérimenté Avatar de aperrin
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 221
    Par défaut
    Pour sauvegarde une java.util.Date en base (quelquesoit la base) il faut passer par une java.sql.Date qui hérite de java.util.Date.

    http://java.sun.com/j2se/1.4.2/docs/api/

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 64
    Par défaut
    oui mais ça c'est déjà fait dans mon code en haut.

    le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Date date_commande = null;
    c'est en fait bien évidement un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     java.sql.Date date_commande = null;
    et justement l'erreur c'est que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date

  6. #6
    Membre expérimenté Avatar de aperrin
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 221
    Par défaut
    Sauf que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Date) formatter.parse(dateDebut)
    te renvoie un java.util.Date
    Il faut que tu fasse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.sql.Date maDateASauvegarderEnBase = new java.sql.Date (date_commande.getTime());

  7. #7
    Nouveau membre du Club
    Inscrit en
    Août 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 9
    Par défaut
    Bonjour,
    sauf qu'une fois que je fais l'insertion dans ma base, j'ai l'erreur suivante comme quoi y a une incompatibilité entre le type date de java et celui de sql
    Note que ce n'est pas à l'insertion en base que tu as ce soucis, mais avant. Tu ne peux pas caster un java.util.Date en java.sql.Date. Même si ces deux classes portent le même nom, elles ne sont pas interchangeables (enfin, pas comme tu le fais).
    Il faut que ton objet date_commande (attention à la nomenclature java => dateCommande) soit du type java.util.Date, comme l'objet renvoyé par formatter.parse(). Si, après, tu as absolument besoin d'un java.sql.Date, tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.sql.Date dateSql = new java.sql.Date(date_commande.getTime());
    Vérifie cependant si tu peux utiliser un java.util.Date pour l'insertion en base, c'est parfois plus pratique (Hibernate le permet par exemple).

Discussions similaires

  1. differences de type Date entre un formulaire et un état
    Par Falcdyr dans le forum VBA Access
    Réponses: 6
    Dernier message: 09/06/2008, 10h42
  2. Utilisation des types de données bit dans SQL Server
    Par yanal dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/05/2008, 14h19
  3. Problème type DATE et fonctions PL/SQL
    Par craweb dans le forum PL/SQL
    Réponses: 7
    Dernier message: 25/02/2007, 18h52
  4. [MySQL] Comparer des info date dans une requete SQL
    Par kaygee dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 06/01/2006, 21h56
  5. [XSD] Incompatibilité des types xs:ID et xs:IDREF ?
    Par Cpt.FLAM dans le forum Valider
    Réponses: 6
    Dernier message: 08/04/2005, 14h54

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