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 :

[Débutant(e)]Type Int incompatible avec type Integer ???


Sujet :

Langage Java

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 42
    Points : 24
    Points
    24
    Par défaut [Débutant(e)]Type Int incompatible avec type Integer ???
    Bonjour,

    Je bloc sur un problème de typage de variable et ça m'agaçe. J'ai un Javabean dans lequel j'ai déclaré une propriété de type Integer. Je veux alimenter ce javabean à partir d'une base de donnée MySQL. J'utilise donc la librairie com.mysql.jdbc.* qui contient l'instruction getInt() pour lire un entier dans un Resultset J'ai donc la ligne de code suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UF.numutil  = RSet.getInt("numutil");
    Où UF est une instense de mon javabean et RSet mon Resultset. J'ai le message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    incompatible types
    found : Int 
    required : java.lang.integer
    Mon Resultset et de type com.mysql.jdbc.ResultSet.

    Quelqu'un a t il une solution à ce problème épineux ?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 304
    Points : 348
    Points
    348
    Par défaut
    C'est quoi numutil?

    Recup ton int
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int tadonnee = RSet.getInt("numutil");
    et ensuite tu la convertis en Integer.
    --Miss Gaëlle--

  3. #3
    NGY
    NGY est déconnecté
    Membre habitué
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 164
    Points
    164
    Par défaut
    C'est que getInt() retourne un int et pas Integer.
    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UF.numutil  = new Integer(RSet.getInt("numutil"));

  4. #4
    Membre du Club

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 25
    Points : 44
    Points
    44
    Par défaut
    getInt renvoie un int
    et numutil est un Integer...

    donc tu dois faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UF.numutil  = new Integer(RSet.getInt("numutil"));

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Points : 861
    Points
    861
    Par défaut
    d'où l'utilité de l'auto-boxing dans Tiger
    Ignorer c'est aussi croire que l'on sait.
    Merci d'essayer d'écrire correctement.
    Pas de questions techniques par MP SVP.

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Citation Envoyé par remika
    d'où l'utilité de l'auto-boxing dans Tiger
    C est carrement appreciable
    A noter que le travail est le meme derriere (utilisation des Wrapper Classes)

    Sun Certified Business Component Developer
    Sun Certified Java Programmer
    --
    The definitive toolbox for GWT applications: gwt-toolbox
    My blog about Java and JEE: Benjamin's Blog

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 42
    Points : 24
    Points
    24
    Par défaut
    la solution suivante fonctionne nikel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UF.numutil  = new Integer(RSet.getInt("numutil"));
    Merci beaucoup, mais pourquoi cette ligne là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UF.numutil  = (Integer) RSet.getInt("numutil");
    ne résoud t'elle pas mon problème ?

    PS : C'est quoi l'autoboxing et c'est quoi Tiger ?

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    tiger c est le nom de code donne pour java 5.0 (java 6 aura, quant a lui, "Mustang" comme nom de code )

    Avec l auto-boxing et l auto-unboxing, tu n est pas oblige de passer par la Wrapper Class, le code aurait ete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UF.numutil  = RSet.getInt("numutil");

    Sun Certified Business Component Developer
    Sun Certified Java Programmer
    --
    The definitive toolbox for GWT applications: gwt-toolbox
    My blog about Java and JEE: Benjamin's Blog

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 41
    Points : 30
    Points
    30
    Par défaut euh
    Je pense qu'un int est un type primitif et donc incomptable avec Integer, Integer est une classe à part qui possède ses propres méthodes et a quelque part dans ses attribut un int, c'est pourquoi le constructeur de Integer prend un int en argument.
    int ne possède pas ces méthodes et donc le compilateur rejette le cast de int-->Integer.

    Enfin, je pense que c'est ça!

  10. #10
    Expert éminent sénior


    Profil pro
    Inscrit en
    Mai 2003
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 3 240
    Points : 11 101
    Points
    11 101
    Par défaut
    Personellement, je voudrais rajouter une info assez importante à ce que vous venez de répondre jusqu'à présent.
    En effet, personne n'a encore dit que l'utilisation de l'autoboxing ou de la transformation de int en Integer n'est pas suffisante en soi.

    En fait, il te faut faire quelque chose du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            Integer in = null;
            int i = rs.getInt(1);
            if (!rs.wasNull()) {
                in = Integer.valueOf(i);
            }
    SI ton champ dans la DB peut être NULL.

    Imagine en effet que tu as un champ dans ta DB pour lequel tu acceptes qu'il puisse être NULL. Et tu ferais juste un getInt() que tu convertirais en Integer. Tu perdrais le fait que le champ était NULL dans la DB. Puisque maintenant, ton Integer vaudrait 0 et non plus NULL. Génant si tu dois faire après un update du record, où tu remplacerais NULL par 0. Pourrait être source de problème.

    Personellement, à part pour des questions de performance, et encore, je n'ai toujours pas compris pourquoi l'API JDBC retourne des primitives au lieu des wrappers.

    Car, pour les raisons que je viens d'expliquer, il est assez dangereux de faire correspondre des primitives avec des champs DB qui peuvent être NULL (ce qui arrive assez fréquemment).

    Si l'API de ResultSet supportait le Integer getInteger(), on pourrait alors écrire:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            Integer in = rs.getInteger(1);
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            Integer in = null;
            int i = rs.getInt(1);
            if (!rs.wasNull()) {
                in = Integer.valueOf(i);
            }
    Lorsqu'il faudrait un int, avant JDK 5, on aurait alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            Integer in = rs.getInteger(1);
            int i = 0;
            if (in != null) {
              i = in.intValue();
           }
    Avec JDK 5, on aurait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            Integer in = rs.getInteger(1);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            int i = rs.getInteger(1); //AutoBoxing ici, sans problème
    Bref, AMHA, l'API JDBC aurait du retourner des Integer et non des int. Ou alors au moins supporter Integer getInteger() à coté de int getInt().

    Juste mon avis.[/code]
    Vincent Brabant

    Ne pas me contacter par MP ni par mail pour des questions techniques. Ma liste d'amis restera vide.

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ZF 1.10] Clause where qui fonctionne avec type int mais pas avec type String
    Par shadypierre dans le forum Zend_Db
    Réponses: 5
    Dernier message: 30/04/2010, 14h00
  2. LIKE avec type "int"
    Par doux35 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/04/2008, 17h08
  3. [Hibernate] Pb avec type int
    Par raj dans le forum Hibernate
    Réponses: 1
    Dernier message: 31/03/2006, 22h10
  4. Réponses: 3
    Dernier message: 23/02/2006, 10h37
  5. ODBC Access => Type Incompatible avec un champ DATE ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 6
    Dernier message: 23/04/2005, 03h02

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