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 :

Conversion d'une chaine de caractere en datetime


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 179
    Points : 50
    Points
    50
    Par défaut Conversion d'une chaine de caractere en datetime
    Bonjour,

    j'ai écrit un programme en java qui permet d'afficher à l'écran le résultat d'une requete sql.
    Dans la requete sql, il y a en autres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE (I.[Close Date & Time] BETWEEN '20070622 07:00:00.000' AND '20070622 19:00:00.000')
    AND (I.[GROUP Name]='EHSFAC-SERVICEDESK1' OR I.[GROUP Name]='EHSFAC-SERVICEDESK2')
    Maitenant, je souhaite remplacer la date (ici 20070622) par une chaine de caractere qui aura été
    fourni par l'utilisateur.
    Je récupere la date entrée de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String date;
    Container container = frame.getContentPane();
    String message = "Entrez une date au format américain\nExemple : 20070622";
    date = JOptionPane.showInputDialog(container, message);
    que j'ai injecté dans le programme java de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "WHERE (I.[Close Date & Time] BETWEEN '" + date + " 07:00:00.000' AND '" + date +" 19:00:00.000') "+
           "AND (I.[GROUP Name]='EHSFAC-SERVICEDESK1' OR I.[GROUP Name]='EHSFAC-SERVICEDESK2') "
    Avec cette écriture, j'obtiens l'exception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][SQL Server]La conversion d'un type de données CHAR en type DATETIME a donné une valeur hors des limites des valeurs de date et d'heure.
    	at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
    	at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
    	at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(Unknown Source)
    	at sun.jdbc.odbc.JdbcOdbcStatement.execute(Unknown Source)
    	at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(Unknown Source)
    	at MonMenu.main(MonMenu.java:551)
    Je voudrai savoir ce qu'il faut faire pour qu'il n'y ait plus ce probleme.

    Merci

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Points : 1 639
    Points
    1 639
    Par défaut
    ca depend:
    [Close Date & Time] c'est quoi des String, des dates ?
    et ensuite ca marche ca?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE (I.[Close Date & Time] BETWEEN '20070622 07:00:00.000' AND '20070622 19:00:00.000')
    AND (I.[GROUP Name]='EHSFAC-SERVICEDESK1' OR I.[GROUP Name]='EHSFAC-SERVICEDESK2')
    Commence par ecrire correctement ta requete SQL dans un editeur et ensuite tu pourras la mettre dans ton code Java

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Ca m'est déjà arrivé aussi

    En fait le query analyser est très souple sur ce genre de choses, il converti ta chaine en date tout seul sans rien dire.

    Le pilote ODBC n'en fait pas autant.

    Tu as plusieurs possibilités :
    - soit tu compares des dates comme tu as commencé, auquel cas il te faut utiliser des opérations SQL server de conversion
    un peu comme ca (je ne me souviens plus les fonctions qui vont bien...):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "WHERE (I.[Close Date & Time] BETWEEN date('"+date+" 07:00:00.000') AND date('" +date+" 19:00:00.000'))
    - soit tu compares des chaines, il te faut alors changer ton modele de données

    - sinon tu peux tout passer en timestamp

    en espérant que ca répond à ta question...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 179
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par willoi
    ca depend:
    [Close Date & Time] c'est quoi des String, des dates ?
    et ensuite ca marche ca?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE (I.[Close Date & Time] BETWEEN '20070622 07:00:00.000' AND '20070622 19:00:00.000')
    AND (I.[GROUP Name]='EHSFAC-SERVICEDESK1' OR I.[GROUP Name]='EHSFAC-SERVICEDESK2')
    Commence par ecrire correctement ta requete SQL dans un editeur et ensuite tu pourras la mettre dans ton code Java
    [Close Date & Time] est de type datetime

    La requete sql que j'ai écrit fonctionne mais est longue. Je n'ai écrit que la partie
    ou la date intervenait

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Points : 1 639
    Points
    1 639
    Par défaut
    Es-tu bien sur que ton sql genere te donne exactement le meme requete?

    Sinon tu peux aussi utiliser la fonction sql TO_CHAR pour ecrire ta comparaison.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 179
    Points : 50
    Points
    50
    Par défaut
    J'ai trouvé que pour faire une conversion de string en datetime, il fallait faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONVERT(datetime,'20070625')
    Donc j'ai appliqué ça à la requête sql qu'il me faut (je ne mets que le where) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE (I.[Close Date & Time] BETWEEN CONVERT(datetime,'20070625') + '00:00:00.000' AND CONVERT(datetime,'20070625') + '19:00:00.000')
    AND (I.[GROUP Name]='EHSFAC-SERVICEDESK1' or I.[GROUP Name]='EHSFAC-SERVICEDESK2')
    Cela fonctionne.
    Mais quand je mets ça dans mon programme java en remplaçant '20070625' par String date = "20076025" ça ne donne rien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "WHERE (I.[Close Date & Time] BETWEEN CONVERT(datetime,date) + '00:00:00.000' AND CONVERT(datetime,date) + '19:00:00.000') " +
    "AND (I.[GROUP Name]='EHSFAC-SERVICEDESK1' OR I.[GROUP Name]='EHSFAC-SERVICEDESK2') "
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "WHERE (I.[Close Date & Time] BETWEEN CONVERT(datetime,'date') + '00:00:00.000' AND CONVERT(datetime,'date') + '19:00:00.000') " +
    "AND (I.[GROUP Name]='EHSFAC-SERVICEDESK1' OR I.[GROUP Name]='EHSFAC-SERVICEDESK2') "
    ne donne rien.
    Mais écrit tel quel dans le programme java, ça fonctionne et ça donne le même résultat que lors du lancement avec sql server :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "WHERE (I.[Close Date & Time] BETWEEN CONVERT(datetime,'20070625') + '00:00:00.000' AND CONVERT(datetime,'20070625') + '19:00:00.000') "+
    "AND (I.[GROUP Name]='EHSFAC-SERVICEDESK1' or I.[GROUP Name]='EHSFAC-SERVICEDESK2') "+
    PS : la fonction to_char n'est pas reconnu avec sql server 2005

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Il y a un truc que je ne comprends pas.
    Pourquoi tu ajoutes ca : '00:00:00.000'

    As tu essayé comme ca ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "WHERE (I.[Close Date & Time] BETWEEN CONVERT(datetime,'date') AND CONVERT(datetime,'date') ) "

Discussions similaires

  1. conversion d'un nombre en une chaine de caracteres
    Par solitaire2010 dans le forum Débuter
    Réponses: 3
    Dernier message: 25/12/2010, 19h36
  2. conversion d'une chaine de caractere en un entier
    Par la_reine dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 13/05/2008, 19h21
  3. Réponses: 13
    Dernier message: 18/01/2008, 20h53
  4. Réponses: 9
    Dernier message: 06/11/2007, 13h36
  5. Controler une chaine de caracteres ou d'entiers?
    Par Le druide dans le forum C
    Réponses: 6
    Dernier message: 25/09/2003, 09h48

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