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

Langage Java Discussion :

Arguments incompatibles à l'appel


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 12
    Points
    12
    Par défaut Arguments incompatibles à l'appel
    Bonjour.
    Je souhaite intégrer un timestamp dans une base de données HSQLDB. Pour cela je crée une classe test_OObase disposant de la méthode suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        public int insertRecords(Date stamp, int num, String machine, String instance, int port, int sga, int taille, int nbdbf, int nbtemp, int arch, int arch_act, int nbarch, int volarch, int drapeau) {
     
            try {   
                int Nblig = st.executeUpdate("INSERT INTO scrute_base (stamp, num, machine, instance, port, sga, taille, nbdbf, nbtemp, arch, arch_act, nbarch, volarch, drapeau) VALUES ('"+stamp+"','"+num+"', '"+machine+"', '"+instance+"', '"+port+"', '"+sga+"', '"+taille+"', '"+nbdbf+"', '"+nbtemp+"', '"+arch+"', '"+arch_act+"', '"+nbarch+"', '"+volarch+"', '"+drapeau+"')");
                return Nblig;
            } catch(SQLException err) {
                System.err.println("\nERROR: Failed to insert records.");
                //err.printStackTrace();
                return 0;
            }                                                                     
     
        }
    Cette méthode est appelée dans la classe scrute_bases, ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    				Date stamp = new Date();
    				stamp.getTime();
    				System.out.println("Date : "+stamp);
     
    				int val = hsqldb.insertRecords(stamp, boucle2, Tab_BDD[boucle2][0], Tab_BDD[boucle2][1], 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
    Java refuse en me disant :
    "the method insertRecords (Date,int,String,String,int,int,int,int,int,int,int,int,int,int) in the type test_OObase in not applicable for the arguments (Date,int,String,String,int,int,int,int,int,int,int,int,int,int)

    Je ne comprends pas. J'ai parfaite égalité entre le nombre d'arguments et leur type.
    Est-ce un problème de format de date ?

    Je suis en Eclipse 3.2.2 avec une jre1.5.0_06

    Merci pour votre aide.

    Théophanie

  2. #2
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Points : 318
    Points
    318
    Par défaut
    Question peut-être bidon, mais tes imports de Date sont-ils bien les mêmes dans les 2 classes ?

  3. #3
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 108
    Points : 3 203
    Points
    3 203
    Par défaut
    autre idée :

    c'est l'insertion de ta date qui cloche :

    dans ta requete tu mets :
    .....'"+stamp+"'.....

    et stamp c'est un Object Date en Java.
    quand tu execute il appelle la methode toString() de l'objet stamp.
    ce qui donne un truc du genre :
    dow mon dd hh:mm:ss zzz yyyy
    (http://java.sun.com/j2se/1.4.2/docs/...html#toString() )

    alors que pour inserer en SQL ca doit certaine etre ecrit comme ca :
    2007-11-21
    Systèmes d'Informations Géographiques
    - Projets : Unlicense.science - Apache.SIS

    Pour un monde sans BigBrother IxQuick ni censure RSF et Les moutons

  4. #4
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Points : 318
    Points
    318
    Par défaut
    Citation Envoyé par eclesia Voir le message
    autre idée :
    alors que pour inserer en SQL ca doit certaine etre ecrit comme ca :
    2007-11-21
    Oui mais là c'est une SQL exception qu'elle devrait prendre lors de l'executeUpdate, une erreur à l'exécution donc, or là il semble que ce soit une erreur à la compil'.

    Par contre, cela risque de se passer en effet, donc il peut être judicieux de passer par un PreparedStatement...

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Pour compléter ce que dit _devteam, à mon avis, tu utilises java.sql.Date d'un côté et java.util.Date de l'autre. Vérifie tes besoins et tes imports.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 12
    Points
    12
    Par défaut Insertion manquée
    J'ai ajouté la ligne suivante du côté de la classe "test_OObase" afin d'avoir le même type de date de chaque côté :

    import java.util.Date;

    Il y a un mieux car j'ai désormais un message "ERROR: Failed to insert records."

    Je vais insérer désormais un format date du type "AAAA-MM-JJ" comme l'indique eclesia.

    Théophanie

  7. #7
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Points : 318
    Points
    318
    Par défaut
    Impec ! Par contre il peut être plus simple - et plus portable - de passer par un PreparedStatement et faire un setTimeStamp

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 12
    Points
    12
    Par défaut Insertion réussie du timestamp
    Merci pour vos conseils.
    L'insertion fonctionne avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    PreparedStatement p = connec.prepareStatement("insert into scrute_base values(?,?,?,?,?,?,?,?,?,?,?,?,?,?);");
    p.setTimestamp(1, new Timestamp(System.currentTimeMillis()) );
    p.setInt(2, num);
    ...
    p.setString(14, drapeau);
     
    p.executeUpdate();
    Néanmoins, dans le fichier script qui contient les données de la table, la date apparaît sous la forme 'AAAA-MM-JJ'
    Je suppose qu'il existe un moyen d'insérer une date contenant réellement les millisecondes.

    Théophanie

  9. #9
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Points : 318
    Points
    318
    Par défaut
    Si tu veux stocker la date en millisecondes, pourquoi ne pas déclarer ton champ en tant que number, et ne traiter ce dernier en date que lorsque tu récupères cette valeur ?

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 12
    Points
    12
    Par défaut Heure à zéro
    Dev_Team_,
    Bonjour.
    J'ai souhaité continuer avec les objets Date avant d'utiliser un number à reconvertir ( chose que je ne sais pas faire au passage ).
    Voici ce que j'obtiens actuellement :

    Source de l'insertion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PreparedStatement p = connec.prepareStatement("insert into scrute_base values(?,?,?,?,?,?,?,?,?,?,?,?,?,?);");
    java.sql.Timestamp  sqlDate = new java.sql.Timestamp(new java.util.Date().getTime());
    System.out.println("Timestamp: "+sqlDate);
    p.setTimestamp(1, sqlDate);
    Affichage
    Timestamp: 2008-03-06 12:04:28.328
    Source de la récupération dans la base HSQLDB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while(rs.next())
    {
    Calendar   ca   =   Calendar.getInstance();
    System.out.println("Heure détaillée : "+rs.getTimestamp("stamp", ca)+ " --- " + rs.getString("num")+ " --- " + rs.getString("machine")+ " --- " + rs.getString("instance")+ " --- " + rs.getString("port")+ " --- " + rs.getString("sga")+ " --- " + rs.getString("taille")+ " --- " + rs.getString("nbdbf")+ " --- " + rs.getString("nbtemp")+ " --- " + rs.getString("arch")+ " --- " + rs.getString("arch_act")+ " --- " + rs.getString("nbarch")+ " --- " + rs.getString("volarch")+ " --- " + rs.getString("drapeau"));
    }
    Affichage :
    Heure détaillée : 2008-03-05 00:00:00.0 --- 5 --- machine --- instance --- 1521 ---
    Il doit bien y avoir un moyen d'afficher l'heure complète.

    Voici le contenu correspondant de mon fichier script HSQLDB :
    INSERT INTO SCRUTE_BASE VALUES('2008-03-05',5,' machine',' instance',' 1521',
    Bonne journée.

    Théophanie

Discussions similaires

  1. [XL-2002] Que mettre en argument quand on appelle la procédure Exit d'un TextBox
    Par Touffe54 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/11/2010, 21h17
  2. Réponses: 2
    Dernier message: 11/05/2009, 15h25
  3. Problème d'arguments dans l'appel de SqlPlus
    Par mut_ dans le forum Sql*Plus
    Réponses: 2
    Dernier message: 04/07/2007, 09h42
  4. [PHP-JS] Variable PHP comme argument dans l'appel d'une fonction Javascript
    Par The Molo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/04/2007, 09h00
  5. Réponses: 3
    Dernier message: 05/01/2007, 09h45

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