1. #1
    Futur Membre du Club
    Femme Profil pro
    Stagiaire BI
    Inscrit en
    août 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Stagiaire BI
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2014
    Messages : 27
    Points : 7
    Points
    7

    Par défaut NullPointerException date null

    Bonjour,

    Je suis débutante sur Talend.

    J'ai un tposgresqlInput qui contient des date qui ont ce format 18MAY2015:00:00:00 j'ai converti string en date en faisant ceci

    TalendDate.parseDateLocale("ddMMMyyyy:HH:mm:ss",test.date_debut,"EN"). J'ai un NullpointEcxeption comme erreur. Savez vous comment je peux gérer les dates null svp?


    PS: ça me donne le résultat attendu pour les colonnes qui n'ont pas de date manquante que j'ai effectué sur d'autres tables.

  2. #2
    Membre régulier
    Homme Profil pro
    Ingénieur d'études entrepôt de données
    Inscrit en
    mars 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur d'études entrepôt de données
    Secteur : Biens de consommation

    Informations forums :
    Inscription : mars 2006
    Messages : 102
    Points : 124
    Points
    124

    Par défaut

    Bonjour Lindaz,

    Tu vas vite te rendre compte que les valeurs "null" sont compliquées à gérer, ou tout du moins, qu'il faut toujours en tenir compte!

    Le problème est que, dans tes données, tu reçois des valeurs null et tu tentes ensuite de les donner à une fonction qui n'accepte pas les "null".

    Une solution est d'utiliser la syntaxe conditionnelle : test ? si_oui : si_non

    Dans ton cas, tu pourrais remplacer ce que tu as écris par :

    test.date_debut == null ? null : TalendDate.parseDateLocale("ddMMMyyyy:HH:mm:ss",test.date_debut,"EN")


    Qu'est-ce que ca va faire ?
    Si le résultat du test est vrai (date_debut est null), alors tu mets null dans la variable cible.
    Si le résultat est faux (pas null), alors tu parses ta date !

    Attention, dans la variable cible la case "nullable" doit être cochée, sinon tu auras aussi un null pointer exception. Idem, si date_debut n'est pas en "nullable".

    Il y a d'autres solutions mais il faudrait en savoir plus sur ce que tu tentes précisement.
    Par exemple tu pourrais filtrer les lignes pour lesquelles la date est null.
    Tu pourrais aussi mettre une date par défaut.
    Ces deux solution peuvent être faites via des composants, ou dans la requête SQL directement (si tu attaque une BDD).


    Cordialement,

  3. #3
    Membre confirmé Avatar de MythOnirie
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    juin 2012
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : juin 2012
    Messages : 311
    Points : 635
    Points
    635

    Par défaut

    Citation Envoyé par cocaaladioxine Voir le message
    test.date_debut == null ? null : TalendDate.parseDateLocale("ddMMMyyyy:HH:mm:ss",test.date_debut,"EN")
    Il est plus recommandé de faire un Relational.ISNULL(variable) plutôt que variable == null

  4. #4
    Membre régulier
    Homme Profil pro
    Ingénieur d'études entrepôt de données
    Inscrit en
    mars 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur d'études entrepôt de données
    Secteur : Biens de consommation

    Informations forums :
    Inscription : mars 2006
    Messages : 102
    Points : 124
    Points
    124

    Par défaut

    @MythOnirie

    Juste par curiosité, quel est l'avantage de l'un sur l'autre?

    Cordialement,

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Stagiaire BI
    Inscrit en
    août 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Stagiaire BI
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2014
    Messages : 27
    Points : 7
    Points
    7

    Par défaut

    Merci votre réponse rapide. J'essaie vos suggestions et je vous tiens au courant.

  6. #6
    Membre confirmé Avatar de MythOnirie
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    juin 2012
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : juin 2012
    Messages : 311
    Points : 635
    Points
    635

    Par défaut

    Citation Envoyé par cocaaladioxine Voir le message
    @MythOnirie

    Juste par curiosité, quel est l'avantage de l'un sur l'autre?

    Cordialement,
    Au niveau du code il n'y a pas de différence car la routine effectue la même vérification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public static boolean ISNULL(Object variable) {
            return variable == null;
        }
    Cependant la lecture est, à mon sens, bien plus aisé avec le ISNULL qu'avec le == null.

    Du coup, j'avoue que mon message était un peu plus strict que la réalité

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Stagiaire BI
    Inscrit en
    août 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Stagiaire BI
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2014
    Messages : 27
    Points : 7
    Points
    7

    Par défaut

    Nom : ==null.png
Affichages : 13
Taille : 136,6 Ko

  8. #8
    Futur Membre du Club
    Femme Profil pro
    Stagiaire BI
    Inscrit en
    août 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Stagiaire BI
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2014
    Messages : 27
    Points : 7
    Points
    7

    Par défaut

    Nom : ISNULL.png
Affichages : 12
Taille : 137,0 Ko

  9. #9
    Membre régulier
    Homme Profil pro
    Ingénieur d'études entrepôt de données
    Inscrit en
    mars 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur d'études entrepôt de données
    Secteur : Biens de consommation

    Informations forums :
    Inscription : mars 2006
    Messages : 102
    Points : 124
    Points
    124

    Par défaut

    @MythOnirie

    J'imagine que ca dépend un peu du passif en programmation de chacun

    Mais je ne connaissais pas cette écriture, on en apprend tous les jours, merci!

    Bonne journée à toi!

  10. #10
    Futur Membre du Club
    Femme Profil pro
    Stagiaire BI
    Inscrit en
    août 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Stagiaire BI
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2014
    Messages : 27
    Points : 7
    Points
    7

    Par défaut

    Nom : 1ere.png
Affichages : 13
Taille : 63,3 Ko

  11. #11
    Futur Membre du Club
    Femme Profil pro
    Stagiaire BI
    Inscrit en
    août 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Stagiaire BI
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2014
    Messages : 27
    Points : 7
    Points
    7

    Par défaut

    Nom : 2017-07-10-153339_1280x1024_scrot.png
Affichages : 13
Taille : 137,0 Ko

  12. #12
    Futur Membre du Club
    Femme Profil pro
    Stagiaire BI
    Inscrit en
    août 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Stagiaire BI
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2014
    Messages : 27
    Points : 7
    Points
    7

    Par défaut

    J'ai essayé les 2 méthodes mais, ça me sort une erreur impression d'écran ci-dessus.

  13. #13
    Membre régulier
    Homme Profil pro
    Ingénieur d'études entrepôt de données
    Inscrit en
    mars 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur d'études entrepôt de données
    Secteur : Biens de consommation

    Informations forums :
    Inscription : mars 2006
    Messages : 102
    Points : 124
    Points
    124

    Par défaut

    @Lindaz,

    C'est parceque c'est parseDateLocale ( p minuscule), et non ParseDateLocale.

    Cordialement,

  14. #14
    Futur Membre du Club
    Femme Profil pro
    Stagiaire BI
    Inscrit en
    août 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Stagiaire BI
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2014
    Messages : 27
    Points : 7
    Points
    7

    Par défaut

    Merci beaucoup je n'ai plus d'erreur.

  15. #15
    Futur Membre du Club
    Femme Profil pro
    Stagiaire BI
    Inscrit en
    août 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Stagiaire BI
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2014
    Messages : 27
    Points : 7
    Points
    7

    Par défaut

    J'ai encore une autre question. j'ai des dates qui ont ce format 201501 et j'ai rajouté le dernier jour du mois j'ai obtenu quelque chose de ce genre 1600-01-31. Je voudrai mettre la date 160001 à null.

    J'ai utilisé ce code, mais il ne met pas la date à null.

    table.naiss =="160001" ? null : TalendDate.getLastDayOfMonth(TalendDate.parseDateLocale("yyyyMM",table.naiss,"EN"))

    Merci de votre aide.

  16. #16
    Membre confirmé Avatar de MythOnirie
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    juin 2012
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : juin 2012
    Messages : 311
    Points : 635
    Points
    635

    Par défaut

    Bonjour,

    peut-être est-ce un problème lors du test d'égalité. Pouvez-vous essayer avec : "160001".equals(table.nais) ?

  17. #17
    Membre régulier
    Homme Profil pro
    Ingénieur d'études entrepôt de données
    Inscrit en
    mars 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur d'études entrepôt de données
    Secteur : Biens de consommation

    Informations forums :
    Inscription : mars 2006
    Messages : 102
    Points : 124
    Points
    124

    Par défaut

    pour comparer des chaines de caractères tu dois utiliser la méthode ".equals()" des objets de type String.

    exemple : table.naiss.equals("160001") ? null : .....

    Par contre, attention de ne pas vouloir gérer trop de cas particuliers, tu risques de t'y perdre!

    Je ne sais pas d'où vient ta donnée, mais elle ne me parait pas très "propre".
    Vu que tu as des null et des valeurs incohérentes, fait attention que tu risques aussi d'avoir des chaines qui ne sont pas réellement des dates.
    (genre 201x0102 => ca va aussi provoquer des erreurs à l'exécution).
    Il y a peut-être des actions à mener en amont.

    (Je me demande toujours pourquoi on met des dates dans des chaines de caractère... Reste-t-il réellement des BDD sans type date?)

  18. #18
    Futur Membre du Club
    Femme Profil pro
    Stagiaire BI
    Inscrit en
    août 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Stagiaire BI
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2014
    Messages : 27
    Points : 7
    Points
    7

    Par défaut

    Merci pour votre aide.

    J'ai utilisé ce code

    table.naiss.equals("160001") ? null : TalendDate.getLastDayOfMonth(TalendDate.parseDateLocale("yyyyMM",table.naiss,"EN"))

    et j'ai cette erreur.

    cocaaladioxine pour cette table je n'ai pas de valeur nulle, mais je voudrais mettre la date 160001 à null. Merci pour les conseils.

    Nom : naissance.png
Affichages : 11
Taille : 222,6 Ko

  19. #19
    Membre confirmé Avatar de MythOnirie
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    juin 2012
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : juin 2012
    Messages : 311
    Points : 635
    Points
    635

    Par défaut

    Bonjour, il indique que le traitement essaie d'insérer une valeur nulle dans la colonne death_date ce qui est interdit par une contrainte dans la base de donnée.

  20. #20
    Futur Membre du Club
    Femme Profil pro
    Stagiaire BI
    Inscrit en
    août 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Stagiaire BI
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2014
    Messages : 27
    Points : 7
    Points
    7

    Par défaut

    Bonjour,
    Oui MythOnirie la colonne était à NOT NULL dans la base de données du coup je l'ai mis à NULL. J'ai obtenu ce résultat, j'ai du vide au lieu de null. Comme c'est une date je ne peux pas avoir du null dans la colonne?

    Merci d'avance.

    Nom : image.png
Affichages : 7
Taille : 211,2 Ko

Discussions similaires

  1. [ date ] null
    Par hocinema dans le forum Oracle
    Réponses: 4
    Dernier message: 15/12/2005, 11h34
  2. problème avec les dates nulles
    Par shingo dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 30/09/2005, 12h32
  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, 08h21
  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, 08h37
  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, 14h06

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