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

avec Java Discussion :

choix int ou short


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 64
    Par défaut choix int ou short
    Bonjour à tous,

    Je développe une petite application en java et MySql. Lorsque mes champs dans ma BDD sont de types Date, j'ai appris grâce à ce forum qu'il valait mieux utiliser la classe "java.util.Date" pour se simplifier la tache et la convertir en "java.sql.Date" uniquement dans la couche métier pour communiquer avec la base de données.

    Quand est-il pour le type de donnée Short dans MySql. Vaut-il mieux utiliser le type "int" dans java qui est beaucoup plus souple que le type "short" et le convertir en short pour interroger la BDD?

    Voila, encore une question bête mais je souhaite éclaircir ce problème car manipuler des variables de type short est très ennuyeux. Les index des collections, des tableaux, ... sont toujours de type "int" ce qui m'oblige à les convertir en "short".

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ce n'est pas franchement la même question :

    - java.sql.Date n'est jamais utilisé en dehors des interactions à la BDD. par contre, int et short sont deux types de données très courants en Java.
    - MySQL n'a pas de type de donnée SHORT. Il y a plusieurs types numériques mais aucun ne s'appelle comme ça. Le type short est simplement un moyen de passer une donnée numérique de moins grande capacité que int.
    - ResultSet et PreparedStatement acceptent et fournissent indifféremment des int ou des short. Tu n'as qu'à prendre ce qui te convient.

    Voila, encore une question bête mais je souhaite éclaircir ce problème car manipuler des variables de type short est très ennuyeux. Les index des collections, des tableaux, ... sont toujours de type "int" ce qui m'oblige à les convertir en "short".
    Ce n'est pas une question bête, mais c'est une question de design un peu avancée dont la réponse viendra avec l'expérience.
    En gros, la question est : est-ce que mes nombres ont le droit de dépasser la capacité d'un short, et si non, est-ce que je peux me permettre de manipuler des ints alors qu'ils peuvent dépasser cette capacité ? Ben ça dépend. De tout.

    Personnellement, je préfère ne travailler qu'avec des int : si je donne à la BDD un nombre trop grand, elle me fera une Exception et puis c'est tout.

    Quoi qu'il en soit, la conversion short -> int (par exemple en index de tableau) est automatique. C'est l'inverse qui ne l'est pas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 64
    Par défaut
    Merci pour vos conseils. Dans ma base de données, j'ai des champs qui sont déclarés en SmallInt ce qui correspondrait au type short en java.
    Je suis sur que ces champs ne dépasseront pas la capacité qui est je crois est de 65000 et des poussières. Dans tous les cas, je propage une exception SQL jusqu'à la vue.

    J'ai préféré utiliser des variables de type short en java, car je pensais que cela me ferais gagner de la place mémoire, mais je pense que se doit être minime.
    Je vais donc utiliser par défaut le type int comme ça je ne m'embêterai plus avec la conversion.

    Par contre dans ma classe métier, je ferais par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Integer ligne = 3;
     
    requete = "SELECT toto FROM tata WHERE id_ligne = ?;";
    pre = connex.getConn().prepareStatement(requete);
    pre.setShort(1, ligne.shortValue());

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par RomG7 Voir le message
    Par contre dans ma classe métier, je ferais par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Integer ligne = 3;
     
    requete = "SELECT toto FROM tata WHERE id_ligne = ?;";
    pre = connex.getConn().prepareStatement(requete);
    pre.setShort(1, ligne.shortValue());
    Deux choses :
    - Pourquoi faire ? Du coup tu fournis un short à la BDD et tu l'empêches de s'assurer que le int respectait l'intégrité des données.
    Tu sais, si tu convertis en short un int de valeur supérieure à Short.MAX_VALUE, il y a dépassement de capacité des short, et ça ne fait pas d'erreur : le dépassement est tronqué. En gros, short n = (int)(Short.MAX_VALUE + 1); ça vaut Short.MIN_VALUE.
    Conclusion : en faisant ça il est possible que tu envoies à la base de donnée des nombres négatifs, d'une part, mais aussi positifs et qui n'ont rien à voir avec le int d'origine, d'autre part.

    - il y a plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int ligne = 3;
     
    requete = "SELECT toto FROM tata WHERE id_ligne = ?;";
    pre = connex.getConn().prepareStatement(requete);
    pre.setShort(1, (short)ligne);
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 64
    Par défaut
    Je comprends ce que tu veux dire. Le plus simple pour moi serait peut-être tout simplement de faire. Je pense que cela ne doit pas déranger la base de données, et puis j'aurais l'exception SQL qui sera levée dans le cas d'un dépassement de capacité.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int ligne = 3;
     
    requete = "SELECT toto FROM tata WHERE id_ligne = ?;";
    pre = connex.getConn().prepareStatement(requete);
    pre.setInt(1, ligne);
    Ce sont de petits problèmes de conception qui comme tu dis viendront avec l'expérience. Je connais bien les BDD et j'ai développé 2 ou 3 trucs en VB et en php, mais la en java c'est un autre monde assez vaste.

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

Discussions similaires

  1. Réponses: 26
    Dernier message: 19/08/2013, 18h08
  2. [Langage] Boucle for : char, short VS int
    Par nschoe dans le forum Langage
    Réponses: 8
    Dernier message: 27/11/2008, 17h14
  3. Questions C++ : Short/Int et inline
    Par mister3957 dans le forum C++
    Réponses: 16
    Dernier message: 12/08/2008, 12h46
  4. Réponses: 2
    Dernier message: 16/02/2006, 17h52
  5. short int et int
    Par gaut dans le forum C
    Réponses: 3
    Dernier message: 07/02/2004, 21h06

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