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 :

Traitement date null


Sujet :

JDBC Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Par défaut Traitement date null
    Bonjour

    Je galère depuis un moment sur le traitement de la date null retournée par mysql. En effet mysql retourne une valeur pour une date null qui provoque systématiquement une exception soit par getdate, getobject.tostring ou en passant par simpledateformat.

    Ma question est comment traiter correctement cette valeur. J'ai un peu tout essayé mais je ne suis pas convaincu.

    Merci de vos réponses

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Un simple test pour vérifier que ta variable n'est pas "null" ne marche pas?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Date result = recuperationDeTaDateDepuisMySQL();
     
    if(result == null) {
       // on va boire un verre
    } else {
       // on se met à bosser
    }
    Si il est anormal que ta base contienne des valeurs de date "nulles", tu peux lever une Exception: c'est sans doute la manière la plus propre de faire

    Si c'est normal... un test de non nullité suffit
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Par défaut
    J'ai essayé

    if(rs.getDate("dte")==null)
    if(rs.getObject("dte")==null)
    dte = rs.rs.getObject("dte").toString()
    dte = sdf(getObject("dte").toString())
    pour aboutir à
    try{dte = getObject("dte").toString();}catch(final SQLException e){dte = "";}
    puis traiter le valeur de dte

  4. #4
    Membre Expert Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Par défaut
    Avec le debuger tu eux voir le contenu de ton ResultSet peut etre ?

    Et quelle est l'exception qui est declenchee ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Par défaut
    Le débuger !! je n'ai jamais réussi à le faire fonctionner. Je mentirai une fois pluis niet niet pourquoi ? je n'ai jamais trouvé de prose sur le sujet donc je me dé.. avec la console.

    donc la console me retourne:

    java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Date

    si tu as un tuyau pour faire fonctionner le débuger eclipse 3.2 je suis preneur. J'ai la fenêtre le démarrage, les points d'arrêt et ça s'arrête là.

  6. #6
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    le problème n'est pas que la date est null mais qu'elle vaut "0000-00-00" !

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Par défaut
    elle vaut 0000-00-00 car mysql retourne cette valeur si null ok mais pourquoi on ne peut la traiter comme les autres types de chp avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Date result = recuperationDeTaDateDepuisMySQL();
     
    if(result == null) {
       // on va boire un verre
    } else {
       // on se met à bosser
    }
    si encore on récupère "0000-00-00" avec getobject.tostring

  8. #8
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    voici un lien interressant pourquoi MySql peut avoir '0000-00-00' à la place de null
    nulls

    si quand la date est null MySql renvoie "0000-00-00" pourquoi ne pas le tester ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Date dte = null;
    if(!"0000-00-00".equals(rs.getString("dte")) {
        dte = rs.getDate("dte");
    }

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Par défaut
    même pb

    java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Date

    je n'avais pas essayé ce bout de code mais désolé

  10. #10
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    Cela semble être un problème connu de MySql :
    http://bugs.mysql.com/bug.php?id=13486

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 60
    Par défaut
    Bonjour,

    Je viens de rencontrer le même problème et j'ai enfin réussi à trouver une solution valable, plutôt qu'une bidouille. La source du problème c'est le driver jdbc et la solution est de lui donner des instructions en paramètre lors dans l'url.

    Bref, pour moi ça a résolu le problème et j'ai pu éviter de modifier toutes mes sources existantes.

    jdbc:mysql://kraftek.com/alox?zeroDateTimeBehavior=convertToNull

    zeroDateTimeBehavior peut prendre les valeurs suivantes :
    - exception (valeur par défaut)
    - round (retourne la valeur 01-01-0001 à la place du fameux 0000-00-00)
    - convertToNull

    Voila, j'espère que cela en aidera quelques un.

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

Discussions similaires

  1. [XL-2010] Traitement de date null sur vba et excel
    Par juju05 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/07/2012, 17h44
  2. problème avec les dates nulles
    Par shingo dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 30/09/2005, 13h32
  3. [Delphi & DBExpress ] Mettre un champs date à null
    Par falcon dans le forum Bases de données
    Réponses: 10
    Dernier message: 03/11/2004, 09h21
  4. Date nulle dans une requete paramétrée avec TParameter
    Par denrette dans le forum Bases de données
    Réponses: 3
    Dernier message: 16/06/2004, 09h37
  5. recherche Date nulle dans une table
    Par lol_adele dans le forum Bases de données
    Réponses: 6
    Dernier message: 16/04/2004, 15h06

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