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

Langage Java Discussion :

Manipulation des dates


Sujet :

Langage Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 22
    Par défaut Manipulation des dates
    Bonjour,

    Dans une base MySql j'ai différents champ date que je voudrais pouvoir afficher à l'écran au format jj/mm/aaaa hh:mn AM.

    Quelle est la manipulation pour récupérer le champ date dans la table MySql et la faire afficher dans un jTextField ?

    De même, après modification par l'utilisateur, ce champ jTextField doit être stocké dans la base MySql au format standard date SQL. Quelle est l'opération inverse à effectuer ?

    Merci par avance pour vos réponses.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    pour convertir entre java.util.Date et String, quel que soit le sens, utilise SimpleDateFormat.

    Tu fais donc ceci

    "select from" -> java.sql.Date -> String -> JTextField -> String -> java.util.Date -> "update where"

    en utilisant bien des prepared statements pour ton update (afin de pouvoir passer directement l'objet Date à la db)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 22
    Par défaut
    Merci, je vais essayer. Je te tiens informé.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 22
    Par défaut
    J'arrive à récupérer la date dans la base MySql et à l'afficher comme je le souhaite.

    J'ai du mal pour l'opération inverse.

    En effet, j'ai un jTextField contenant "11/02/1961 05:02 AM" (ou "11/08/1965 17:05") par exemple.

    Je fais un update à l'aide d'un preparedStatement. Il m'affiche une erreur comme quoi le format n'est pas le bon ou qu'il me tronque ma date.

    Pourrais-tu me donner les lignes de commandes exactes depuis mon jTextField jusqu'à mon statement.set???(ma date) ?

    Merci.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    converti tu bien le textField.getText() en date a l'aide de simpleDateFormat avant de l'envoyer à la base de donnée? Montre ton code de mise à jour si tu as un soucis.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 22
    Par défaut
    J'arrive bien à convertir de ma base MySql vers jTextField :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    txtDateMessage.setText((new SimpleDateFormat("dd/MM/yyyy hh:mm a")).format(rstMessage.getDate("DateMessage")));
    Mais pas de mon jTextField vers ma date sql :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    smtMessageUpdate.setString(1, (new SimpleDateFormat("dd/MM/yyyy hh:mm:ss")).format(txtDateMessage.getText()));
    ...
    intStatusMessage = smtMessageUpdate.executeUpdate();

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    c'e'st pas setString mais setDate que tu dois utiliser, et la méthde de simpledateformat a utiliser pour convrtire de String en Date ce n'est pas format mais parse:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    smtMessageUpdate.setDate(1, new SimpleDateFormat("dd/MM/yyyy hh:mm:ss").parse(txtDateMessage.getText()));

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 22
    Par défaut
    J'ai fait la modification suggéré, mais ça ne passe pas. Erreur à la compile :

    The method setDate(int, Date) in the type PreparedStatement is not applicable for the arguments (int, Date)

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    effectivement, il faut aussi convertir la java.util.Date en java.sql.Date

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    smtMessageUpdate.setDate(
        1, 
        new java.sql.Date(
            new SimpleDateFormat("dd/MM/yyyy hh:mm:ss").
                parse(txtDateMessage.getText()).
                getTime()
             )
        );

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 22
    Par défaut
    Encore merci Tchize : il y a du progrès.

    Maintenant il ne m'affiche pas les minutes et à la mise à jour j'ai l'exception :

    Anomalie sur messageMettreAJour : com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '06/11/2008 00:00:00' for column 'DateMessage' at row 1

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 22
    Par défaut
    Pour l'affichage de l'heure, c'est réglé : getTime() au lieu de getDate().

    Mais pas pour la mise à jour.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    quel est le type du champ dans la base de données? Suivant le type, les méthodes à utiliser sont get/setDate, get/setTime ou get/setTimestamp, avec le new java.sql.Date/Time/Timestamp correspondant dans le code

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 22
    Par défaut
    En fait, c'était une base MSAccess avec laquelle j'avais quelques soucis (Microsoft :-( !!)

    Suivant les conseils donnés sur l'un de ces forums, j'ai converti cette base en MySql avec l'outil "Bullzip MS Access to MySQL".

    Le champ d'origine Access était un champ Date/Time (je ne crois pas qu'il y ait d'autres possibilités).

    Ce champ a bien été converti en datetime MySql.

    Je vais essayer toutes les possibilités et je reviens...

    EDIT : Je confirme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    try {
    smtMessageUpdate.setTime(1, 
        new java.sql.Time(
            new SimpleDateFormat("yyyy/MM/dd H:mm:ss").
    	        parse(txtDateMessage.getText()).
    	            getTime()
    	         )
        );
    } catch (ParseException e) {
    	e.printStackTrace();
    }

    Je sors en erreur :
    Anomalie sur messageMettreAJour : com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '01/01/1970 17:04:43' for column 'DateMessage' at row 1

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    a vue de nez ta colonne gère heure et date, le type jdbc correcpondant devrais donc etre "Timestamp".

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 22
    Par défaut
    Effectivement, il semblerait que ce soit une timestamp.

    Donc, en lecture (de MySql vers jTextfield) je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    txtDateMessage.setText((new SimpleDateFormat("dd/MM/yyyy HH:mm")).format(rstMessage.getTimestamp("DateMessage")));
    Ma date s'affiche : "06/01/2009 17:04"

    lorsque je la modifie (de jTextfield vers MySql) je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    try {
    smtMessageUpdate.setTimestamp(1, new java.sql.Timestamp(
    new SimpleDateFormat("dd/MM/yyyy   HH:mm:ss").parse(txtDateMessage.getText()).getTime()));
    			} catch (ParseException e) {
    				e.printStackTrace();
    			}
    Je sors en exception :

    Anomalie sur messageMettreAJour : java.sql.SQLException: No value specified for parameter 1

    com.mysql.jdbc.JDBC4PreparedStatement@b02efa: UPDATE Message SET DateMessage = ** NOT SPECIFIED **, EtatMessage = '2', SujetMessage = 'hola', Message = 'I must say you have 2 beautiful girls, felicidades ' WHERE NumMessage = '1175';
    Il s'agit peut-être d'un soucis lié au preparedstatement ?

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 22
    Par défaut
    Ca y est !!!

    C'est tout simplement le format de la date qui doit être HH:mm et non HH:mm:ss.

    Je pensais que le fait d'indiquer un format de date permettait la conversion d'une date dans ce format. Notamment dans le format de date MySql dans le cas qui m'intéresse.

    Il me faut approfondir ce sujet.

    En tout état de cause, j'avance petit à petit sur mon application.

    Je te remercie Tchize pour ta participation.

    Cordialement.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par Titounet007 Voir le message
    C'est tout simplement le format de la date qui doit être HH:mm et non HH:mm:ss.

    Je pensais que le fait d'indiquer un format de date permettait la conversion d'une date dans ce format. Notamment dans le format de date MySql dans le cas qui m'intéresse.
    Les timestamp, time, date sql n'ont pas de "format", seules les String en ont. Ton erreur viens du fait que ta boite texte a des heure / minutes, mais que tu voulais parser çà avec un DateFormat qui attendais des heures/minutes/seconde. Bref rien à voir avec la db

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

Discussions similaires

  1. [JDBC] manipulation des dates
    Par zais_ethael dans le forum JDBC
    Réponses: 3
    Dernier message: 11/12/2005, 19h55
  2. [JDBC] manipulation des dates/heures en Java
    Par kurkLord dans le forum JDBC
    Réponses: 6
    Dernier message: 09/08/2004, 12h49
  3. Manipulations des Dates
    Par kurtc dans le forum Langage SQL
    Réponses: 11
    Dernier message: 13/04/2004, 14h39
  4. [IB6][BCB5]Manipulation des dates.
    Par Sitting Bull dans le forum SQL
    Réponses: 4
    Dernier message: 09/04/2004, 15h33
  5. Manipuler des dates...
    Par Ti Jen-tsie dans le forum Langage
    Réponses: 4
    Dernier message: 26/06/2003, 11h46

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