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 :

Erreur format Date dans MySql


Sujet :

JDBC Java

  1. #1
    Membre du Club Avatar de stefan73
    Homme Profil pro
    Formateur : OpenOffice.org/LibreOffice
    Inscrit en
    Mai 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Formateur : OpenOffice.org/LibreOffice
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 105
    Points : 61
    Points
    61
    Par défaut Erreur format Date dans MySql
    Bonjour,

    Pour faire suite à ce poste date avec jDateChooser1 j'aimerai insérer cette date dans un champ de ma table.
    Le hic, c'est quand je choisi ma date dans mon jdatechooser elle au format 01/07/10 par contre dans mon champ elle s'écrit ainsi (2001-07-10) ! le 200 se met au niveau des jours alors que je ne veux pas obligatoirement le 2000 2011

    vous auriez une idée ?

  2. #2
    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
    Montrer le code, c'était pas juste pour jDateChooser1.
    En fait, ça c'est typiquement quelque chose que tu dois faire tout le temps. Avant même de poster un truc, tu vas déjà chercher le code en rapport avec la question, tu le colles avec des balises [CODE] autour, et après tu nous expliques pourquoi tu es là à nous montrer ce code*.

    Dans le cas présent, je me demande bien comment tu t'y prends pour insérer en base de données.
    Je suppose que tu as lu les tutoriels et que tu te sers de PreparedStatement ?

    * Grosso-modo, hein. Si tu tapes d'abord l'explication, puis que tu améliores ton code en fonction de ce que tu as dit, puis que tu le colles, ça va aussi. Du moment qu'il est là et que tu étais prêt dès le début à le mettre.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club Avatar de stefan73
    Homme Profil pro
    Formateur : OpenOffice.org/LibreOffice
    Inscrit en
    Mai 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Formateur : OpenOffice.org/LibreOffice
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 105
    Points : 61
    Points
    61
    Par défaut
    Je comprend bien que montrer le code soit un plus ....

    Dans mon cas, j'ai une fonction qui affiche la date et que j'appelle ainsi afficheDate(bonneDate) qui me donne un string .

    Dans mon jBEnvoyerActionPerformed j'ai ceci.

    j'ai ma
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    requete = "INSERT INTO Table(DateEmission ) VALUES ('"+ afficheDate(bonneDate)+"')";
    et mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    try 
     
     
            try {
                    Statement stmt = con.createStatement();
                    int maj = stmt.executeUpdate(requete);
            } catch (SQLException e) {
                System.out.println("Erreur:Anomalie lors de l'execution de la requête : "+e);
            }
    Dans ma table DateEmision et au format Date !
    voila... maintenant je voudrais savoir si d'autres personnes ont eu le même cas que moi et comment z'ont trouvé une solution.

    Peut-être et surement que j'ai tout faut dans mon code dans se cas merci de juste m'aiguiller avec des fleurs

  4. #4
    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
    Voilà. C'est vachement plus clair.

    Lis ça : http://java.developpez.com/faq/jdbc/...paredstatement

    Mais ça manque un peu d'exemple et ça parle pas de la débilité de la gestion des dates en JDBC.

    voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // Convertir java.util.Date en java.sql.Date
    java.sql.Date sqlDate = new java.sql.Date(bonneDate.getTime());
     
    // requête SQL
    String sql = "INSERT INTO Table(DateEmission ) VALUES (?)";
    PreparedStatement stmt = connection.prepareStatement(sql);
     
    // safe insert de la date
    stmt.setDate(1, sqlDate);
     
    // Lancer la commande
    stmt.executeUpdate();
    À noter que java.sql.Date et java.util.Date sont deux types différents. Ils sont dans deux packages différents mais à part ça ils ont le même nom. Presque tout dans Java utilise java.util.Date, mais JDBC utilise java.sql.Date.

    C'est débile mais c'est comme ça. Du coup, on fait une petite conversion et on n'en parle plus.
    Quand on travaille sur de plus gros projets, JDBC est de toute façon bien planqué derrière un gros machin comme Hibernate ou équivalent, qui ne nous font pas perdre du temps sur ça.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club Avatar de stefan73
    Homme Profil pro
    Formateur : OpenOffice.org/LibreOffice
    Inscrit en
    Mai 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Formateur : OpenOffice.org/LibreOffice
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 105
    Points : 61
    Points
    61
    Par défaut
    Merci pour ton exemple et tes explications.
    Mais, il y a comme un tit soucis encore avec ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.sql.Date sqlDate = new java.sql.Date(bonneDate.getTime());
    Pour que cela fonctionne, j'ai rajouté ceci (sinon erreur, voir lacapture d'écran) avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.util.Date bonneDate = new java.util.Date();
    dans mon jBEnvoyerActionPerformed. Mais cela m'insère la date système, et non celle choisie dans mon composant...

    Est pour être encore plus clair. Ici le code de ma fonction afficheDate()

    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
      private String afficheDate(String bonneDate) {
     
        Date laDate = jDateChooser1.getDate();
        Locale locale = Locale.getDefault();
        DateFormat df;
     
        /** 2. Construction du DateFormat en choisiant un format :
        * SHORT = 01/01/2002
        * FULL = lundi 1 janvier 2002
        */ 
        df= DateFormat.getDateInstance(DateFormat.SHORT, locale);
        bonneDate = df.format(laDate);
        //jLabel1.setText(bonneDate);
        return bonneDate;
        }
    sans vouloir être lourd faut-il vraiment utiliser les PreparedStatement car j'ai des requêtes et si faut que je me les refanes toutes a refaire tout ça pour une date

    Donc s'il y avait une solution miracle j'avoue que ça serait bien agréable.
    Images attachées Images attachées  

  6. #6
    Membre du Club Avatar de stefan73
    Homme Profil pro
    Formateur : OpenOffice.org/LibreOffice
    Inscrit en
    Mai 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Formateur : OpenOffice.org/LibreOffice
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 105
    Points : 61
    Points
    61
    Par défaut
    Bonjour,

    avec ce code j'arrive bien à afficher le format voulu !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    java.util.Date DateChoix = jDateChooser1.getDate();//new java.util.Date();    
            SimpleDateFormat dateFormat = new SimpleDateFormat("dd MM yyyy", Locale.FRANCE);
            java.sql.Date sqlDate = new java.sql.Date(DateChoix.getTime());
            System.out.println("Date formatée (format fr) " + dateFormat.format(sqlDate));
    Pour insérer dans ma table. Mais par contre dans ma table c'est toujours le format 2011-07-04 qui est inséré.
    Si vous avec une tite idée ?

  7. #7
    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
    Citation Envoyé par stefan73 Voir le message
    sans vouloir être lourd faut-il vraiment utiliser les PreparedStatement
    Oui. Principe de sécurité de base, et c'est aussi plus reposant sur la syntaxe.

    Citation Envoyé par stefan73 Voir le message
    car j'ai des requêtes et si faut que je me les refanes toutes a refaire tout ça pour une date
    De toute façon ce que tu as fait ne marche pas, non ? Quelle que soit la solution adoptée, te retaper toutes les requêtes, tu n'y couperas pas.

    Il n'est pas obligé d'utiliser les PreparedStatement, c'est juste mieux et plus simple. Y compris dans ton cas.

    Citation Envoyé par stefan73 Voir le message
    Mais par contre dans ma table c'est toujours le format 2011-07-04 qui est inséré.
    Une fois que c'est dans MySql, c'est MySql qui décide du format par défaut. Une date reste toujours la même date, quelle que soit la manière dont tu l'écris.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre du Club Avatar de stefan73
    Homme Profil pro
    Formateur : OpenOffice.org/LibreOffice
    Inscrit en
    Mai 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Formateur : OpenOffice.org/LibreOffice
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 105
    Points : 61
    Points
    61
    Par défaut
    merci pour tes réponses.

    Si l'insertion fonctionne mes données, dont la date s'insères dans ma table. c'était juste le format dans la table qui me chagrine mais d'après tes propos c'est Mysql qui décide. Et bien pour le moment je vais faire avec !

    Mais j'ai encore des questions

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

Discussions similaires

  1. Changer le format date dans MySQL
    Par Anju44 dans le forum Requêtes
    Réponses: 5
    Dernier message: 27/05/2014, 09h07
  2. [MySQL] stoker une date du format francophone dans mysql
    Par phpines dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 22/03/2009, 15h29
  3. Utilisation de format date dans formulaire ss JSP et base mysql
    Par Vincinho dans le forum Servlets/JSP
    Réponses: 20
    Dernier message: 18/03/2009, 13h54
  4. format de la date dans mysql
    Par cherifa_m dans le forum Débuter
    Réponses: 4
    Dernier message: 27/02/2008, 18h29
  5. Erreur lors de la recuperation d'un date dans mysql
    Par tchoukapi dans le forum JDBC
    Réponses: 5
    Dernier message: 10/07/2007, 00h15

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