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

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

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

  7. #7
    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());

  8. #8
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 64
    Par défaut
    merciiiiii beaucoup pour vos réponse,

    donc là avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.sql.Date maDateASauvegarderEnBase = new java.sql.Date (date_commande.getTime());
    l'insertion dans la base marche comme il faut, mais malheureusement pas dans l'autre sens. c'est à dire quand j'essaie de récupérer la date de ma base pour l'afficher il me fait cette erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    javax.servlet.ServletException: Value '0000-00-00' can not be represented as java.sql.Date
    voilà ce que je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    Object r = (ResultSet) mysql.execQuery("select * from commande");
    			ResultSet res;
    			res = (ResultSet) r;
     
    java.sql.Date date = res.getDate(3);
    System.out.println(date);
    je sais pas porquoi ça marche pas

    Merci d'avance pour votre aide!!!

  9. #9
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ResultSet r =  mysql.execQuery("select * from commande");
     
     
    Obejct date = res.getObject(3);
    System.out.println(date);
    Tu regarde la tête que ca a (L'indice de colonne n'est peut être pas le bon).
    Autre test : select champ_date from commande.
    Une autre remarque * dans une requête sql uniquement pour test sinon met les nom de tes champs.

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Avec cette ligne de connection ça passe bcp mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jdbc:mysql://127.0.0.1:3306/BC?zeroDateTimeBehavior=convertToNull

  11. #11
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Salut,

    Moi j'ai pas de pbs avec le champ Date,
    J'ai dans sql les champs de type Date et j'ai dans mon code des champs de type Date aussi (java.util.Date).

    Sauf que j'utilise toujours le format
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");

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, 11h42
  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, 15h19
  3. Problème type DATE et fonctions PL/SQL
    Par craweb dans le forum PL/SQL
    Réponses: 7
    Dernier message: 25/02/2007, 19h52
  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, 22h56
  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, 15h54

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