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 :

[PreparedStatement] Date Oracle


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 18
    Par défaut [PreparedStatement] Date Oracle
    j'ai testé la reqûete via un client de connexion (TOAD) à la base de donnée (Oracle 10g)
    la requpête s'exécute bien et donne des resultats corrects

    sauf que quand je passe à l'exécution de cette même requête en utilisant PreparedStatment ça fonctionne pas, et j'ai droit à une erreur ORACLE :
    ORA-0xxxx : invalid month
    j'ai essayé avec plusieurs formats de la date :

    dd/MM/yyyy ; yyyy/MM/dd ; dd-MM-yyyy ; yyyy-MM-dd

    mais ça marche pas:

    voici ma partie de code avec les declarations:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    KeyNamePair key ;
     
           SimpleDateFormat form= new SimpleDateFormat("yyyy/MM/dd");
     
     
    	    /*requete de chargement des détails du régime horaire selon l'employé*/
    		String sql =  "SELECT REGIME_HORAIRE, SAISON_REGIME, HEURE_DEB_SERVICE, HEURE_DEBUT_REPAS, HEURE_FIN_REPAS, HEURE_FIN_SERVICE "
    			+ "FROM   CUST_CONTRAT a , CUST_REGIMEHORAIRE b, CUST_REGIMEVARI c, CUST_REGIMESAISON d " 			
    			+ "WHERE  a.CUST_EMPLOYEE_ID =?" 		
     			+ "AND    a.CUST_REGIMEHORAIRE_ID=b.CUST_REGIMEHORAIRE_ID "		
    			+ "AND    b.CUST_REGIMEHORAIRE_ID=c.CUST_REGIMEHORAIRE_ID "			
    			+ "AND    c.CUST_REGIMESAISON_ID=d.CUST_REGIMESAISON_ID " 			
    			+ "AND    d.DATE_DEB_VALIDITE >= ? "
                            + "AND    d.DATE_FIN_VALIDITE <=? ";
     
    		try{	
    			/*création de la requête*/
    			PreparedStatement pstmt = DB.prepareStatement(sql);
     
    			/*remplissage des variables dans la requête*/
    			key =(KeyNamePair) employee.getSelectedItem();
    			pstmt.setInt(1,key.getKey());
     
    			pstmt.setString(2,form.format(dateDeb.getValue()));			
    			pstmt.setString(3,form.format(dateFin.getValue()));
     
    			/*exécution de la requête*/
     
    			ResultSet rs = pstmt.executeQuery();
     
     
    			int i=0;
    			while(rs.next())
    			{/*chargement des détails dans les champs d'un  tableau*/
    				regim.setValueAt(rs.getString(1),i,0);
    			        regim.setValueAt(rs.getString(2),i,1);
    				regim.setValueAt(rs.getString(3),i,4);
    				regim.setValueAt(rs.getString(4),i,5);
    				regim.setValueAt(rs.getString(5),i,6);
    				regim.setValueAt(rs.getString(6),i,7);
    				i++;
    			}
    		}
     
    		catch (Exception e)
    		{
    			System.out.println("error:" + e );
    		}

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Par défaut
    tu a essayer d'afficher la requête que ton prog créer après remplissage des variables?

    Si oui peut tu donner la requête avec les variables remplies?

  3. #3
    Membre émérite Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Par défaut
    déjà di dateDeb et dateFin sont des dates, utilise setDate au lieu de setString

  4. #4
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 18
    Par défaut
    j'utilise actuellement eclipse et j'ai un peu du mal à me retropuver dans le
    débogage si c'est ce que tu essaye de me demander

    sinon je vois pas de methode qui donne le PreparedStatment


    pour remika:

    non dateDeb et dateFin sont des Date oui c'est vrai

    mais j'le formate avec form.format qui retourne un String !
    donc quand je met un setDate, j'ai un message lors du contrôle sémantique

  5. #5
    Membre émérite Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Par défaut
    franchement je comprends pas pourquoi tu formates tes dates ?

    tu fais un setDate avec des java.sql.Date et c'est fini ?

  6. #6
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 18
    Par défaut
    parceque dateDeb et dateFin sont des JSpinner

    et quand je récupère les dates qui y sont avec getValue()
    j'ai une date du format suivant:

    Tue Feb 14 10:05:19 CET 2006


    si je mets cette date dans le setDate oracle n'accepterait pas ce format de date!

  7. #7
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Par défaut
    Il faut que tu fasse un cast de datedeb et datefin pour que ce soit des types date sinon oracle n'acceptera jamais.

    Et sinon y'a pas une option pour changer le format de la date de tes JSpinners?

  8. #8
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 18
    Par défaut
    j'ai essayé de faire un cast avec (java.sql.Date) mais à l'exécution j'ai une erreur: java.lang.ClassCastException

    et les JSpinner ont un constructeur qui accepte une date de type Date
    si je formatte cette Date je la récupère en String, alors il ne veut plus l'accepter dans son constructeur

  9. #9
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par DeVoN
    j'ai une date du format suivant:

    Tue Feb 14 10:05:19 CET 2006
    Un objet Date contient simplement le nombre de milliseconde depuis le premier janvier 1970. Elle n'a aucun format particulier !!!!

    C'est lorsque tu l'affiches que tu utilises un format ou un autre....

    Citation Envoyé par DeVoN
    si je mets cette date dans le setDate oracle n'accepterait pas ce format de date!
    As-tu au moins essayé ?

    Tu ne passes pas un format mais une Date, et le driver JDBC se chargera donc de la formater selon le format utilisé par la base de données...


    Citation Envoyé par DeVoN
    j'ai essayé de faire un cast avec (java.sql.Date) mais à l'exécution j'ai une erreur: java.lang.ClassCastException
    FAQ : Comment obtenir une instance de java.sql.Date, Time ou Timestamp ?


    a++

  10. #10
    Membre émérite Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Par défaut
    JSpinner ont un constructeur qui accepte une date de type Date
    si tu as des java.util.Date, pour obtenir la date SQL tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.sql.Date date_sql = new java.sql.Date(date_util.getTime())

  11. #11
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 18
    Par défaut
    mnt que j'ai essayé:

    je crée un SpinnerDateModel et je l'alimente avec une date java.sql.Date

    je crée un JSpinner avec ce SpinnerDateModel

    getValue() de JSpinner retourne un Object

    je fais un setDate() de getValue() , setDate n'accepte pas Object en paramètre

    je fais un cast (java.sql.Date) de la valeur de getValue(), setDate accepte

    mais, à l'exécution une exception :ClassCastException

Discussions similaires

  1. Récupération de la date Oracle en Java
    Par Lex92 dans le forum JDBC
    Réponses: 6
    Dernier message: 05/03/2008, 13h39
  2. Date Oracle en C
    Par mat453 dans le forum C
    Réponses: 3
    Dernier message: 04/01/2008, 09h23
  3. Format de l'heure d'une date [Oracle 10g]
    Par Dark Ryus dans le forum Oracle
    Réponses: 3
    Dernier message: 23/04/2007, 11h47
  4. [Oracle] Date(oracle) => Année saisie sur 4 jours, retournée sur 2
    Par romulus dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/03/2006, 03h14
  5. [JDBC] String => Date Oracle
    Par mr.t dans le forum JDBC
    Réponses: 22
    Dernier message: 16/02/2005, 18h51

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