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

java.util Java Discussion :

Problème de format de date entre Java et Oracle


Sujet :

java.util Java

  1. #1
    Membre régulier
    Problème de format de date entre Java et Oracle
    Bonjour,

    Je souhaite faire un programme qui crée des données dans une table Oracle mais j'ai un souci avec les dates.

    Voici mon code :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    String[] chaine_tempo= new String[2];
    chaine_tempo[0]=supannaliaslogin;
    String mail =chaine_tempo[0]+"@"+SMTP_Domain_toto;
     
    SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yy" );
    java.util.Date datejour= new java.util.Date();
    String dateString = formatter.format(datejour);
     
    System.out.println("coucou je vais écrire"+ " no_individu :" + id_individu + " datejour : " + dateString);
     
    stmt.executeUpdate("INSERT INTO INDIVIDU_E_MAIL (NO_INDIVIDU,NO_E_MAIL,D_CREATION,D_MODIFICATION) " +
    "VALUES ("+ id_individu +", "+ mail +", " + dateString +", "+ dateString+")");
    La dateString est alors au bon format de date mais bien sûr, c'est une string et non une date et mon problème vient de là car dans la table dans laquelle je souhaite écrire, c'est une date.

    J'ai donc ce message d'erreur:
    ORA-00984: un nom de colonne n'est pas autorisé ici
    J'ai essayé de parser cette date String mais dans ce cas elle n'a plus le format souhaité à savoir DD/MM/yy... Cela me donne une ligne avec par exemple "Sun 16 heure etc ....."

    Quelqu'un saurait-il m'indiquer comment gérer cela ?

    Merci d'avance pour vos propositions.

  2. #2
    Modérateur

    Une proposition serait d'utiliser eventuelement un preparedstatement qui a un belle methode setDate() qui devrait surement t'éviter ce genre d'ennui.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Expert éminent sénior
    +1 pour le preparedstatement.

    Sinon, tu peux passer par un SimpleDateFormat pour récupérer un string qui représente ta date et utiliser la fonction oracle to_date dans ta requête.

    Edit : oups, lu ton code trop vite, le SimpleDateFormat y est déjà! Mais manque bien les to_char

  4. #4
    Membre éprouvé
    Bonjour,
    Comme l'a dit Wax78, l'idéal est d'utiliser un PreparedStatement et de passer dircetement la date en paramètre, sans s'occuper du format.

    Ceci dit ton problème actuel est du à l'absence de guillemets simples autour de tes champs:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
    stmt.executeUpdate("INSERT INTO INDIVIDU_E_MAIL (NO_INDIVIDU,NO_E_MAIL,D_CREATION,D_MODIFICATION) " +
    "VALUES ('"+ id_individu +"', '"+ mail +"', "' + dateString +"', '"+ dateString+"')"); //mieux


    Et de plus une date se gère avec un to_date en Oracle, afin de pas risquer de se planter sur le formattage:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
    stmt.executeUpdate("INSERT INTO INDIVIDU_E_MAIL (NO_INDIVIDU,NO_E_MAIL,D_CREATION,D_MODIFICATION) " +
    "VALUES ('"+ id_individu +"', '"+ mail +"', to_date('"+ dateString+"', 'dd/mm/yyyy'), to_date('"+ dateString+"', 'dd/mm/yyyy'))"); //encore mieux
    Veuillez agréer nos sentiments les plus distingués. Soyez assurés de notre entière collaboration, bien à vous pour toujours et à jamais dans l'unique but de servir l'espérance de votre satisfaction, dis bonjour à ton père et à ta mère, bonne pétanque, mets ton écharpe fais froid dehors.

  5. #5
    Membre régulier
    Merci à tous pour vos réponses.En effet, les guillemets ont résolus mon pb....par contre je n'ai pas eu besoin d'utiliser to_date.
    NFHnv