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 :

Associer des libellés pour des valeurs int lues en base


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 764
    Par défaut Associer des libellés pour des valeurs int lues en base
    Bonjour,

    J'ai une bdd postgresql dans laquelle je stocke des objets qui ont pour attributs pays ou langage.
    Ce sont des attributs répétitifs et je les stocke en INTEGER car si je les stocke en VARCHAR, cela prendra plus de place en BDD.
    Du coup, j'ai France = 1, Italy = 2, Germany = 3 ...etc
    De même pour les langages.

    par contre, quelle serait la manière la plus simple et rapide (en termes de calculs ou d'opérations pour la jvm ou la bdd) pour que je puisse afficher des messages en chaîne de caractère à la place des entiers issus de la BDD (c'est à dire afficher en sortie France plutôt que '1').

    J'ai pensé faire une table Pays et Langue que je pourrais mettre en clé étrangère ou alors des énums dans le java.

    Merci

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Utiliser des enums pourrait être séduisant mais peu flexible. Le mieux à mon avis est effectivement d'avoir des listes de valeurs en base. Le mieux dans ce cas-là est d'utiliser des codes qui ne soient pas des clefs primaires. Ensuite, on pourrait avoir comme code des noms de valeurs d'enum, mais ça pose toujours le problème de la rigueur de devoir maintenir les deux en parallèle. Si on est seul à maintenir le code et la base, on peut facilement (!) s'appliquer cette rigueur. Dans le cadre d'un développement à plusieurs, c'est toujours plus difficile. Et il faut considérer éventuellement le cas où d'autres applications (dans d'autres langages) qui ne supportent pas les enums pourraient aussi accèder à la même base. Enfin, il faut aussi penser à l'aspect localisation qui apporte en parallèle sa complexité.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 764
    Par défaut
    Bonjour Joël !

    Je viens de trouver une autre solution qui tiens dans le java.

    J'ai créé un singleton Country dans lequel j'ai mis une HashMap en paramètre et auquel j'ai donné quelques méthodes d'accés aux données.
    Ce singleton, dans mon appli est instancié et setté à partir d'un fichier de config.

    Ainsi, je peux garder mon attribut pays en Integer dans la base mais créer un objet avec un attribut String dans le java, ce qui me permet d'afficher ou d'envoyer l'objet en json pour les services sans que le client n'ai de retouches à faire. Par contre, le client, lors d'un insert, devra respecter l'orthographe du pays ....
    De cette manière, je n'alourdis pas mes requêtes en bdd avec des jonctions vers les tables pays et langage ... etc

    De plus, je n'ai pas fait d'accesseurs (GETTERS and SETTERS) dans cette classe pour n'utiliser que les méthodes que j'ai crées ... mais bon j'aurais pu faire des accesseurs private !?!

    voici mon singleton :
    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
    import java.io.Serializable;
    import java.util.HashMap;
     
    public class Country implements Serializable {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 5614133456929407301L;
     
    	private HashMap<Integer, String> countryMap;
     
    	/** Unique Instance not pre-initialised*/
    	private static Country INSTANCE = null;
     
    	//CONSTRUCTOR
    	private Country() {
    		countryMap = new HashMap<Integer, String>();
    	}
     
    	//METHODS
     
    	/** merthod to get the unique instance of country singleton */
    	public static Country getInstance()
    	{			
    		if (INSTANCE == null)
    		{ 	INSTANCE = new Country();	
    		}
    		return INSTANCE;
    	}
     
    	public int getCountryNumberFromStringCountryName(String country_name_) {
    			for(Integer number : countryMap.keySet()){
    				if(countryMap.get(number).equals(country_name_)){
    					return number;
    				}
    			}
    		return -1;
    	}
     
    	public String getCountryNameFromCountryNumber(int country_number_){
    		return countryMap.get(country_number_);
    	}
     
    	public void setCountryInMap(String country_name_, int country_number_) {
    		countryMap.put(country_number_, country_name_);
    	}
    }

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static Country getInstance()
    	{			
    		if (INSTANCE == null)
    		{ 	INSTANCE = new Country();	
    		}
    		return INSTANCE;
    	}
    Attention à l'accès concurrent par plusieurs threads !
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 764
    Par défaut
    Merci !

    Je suis en train de faire une page d'administration donc je ne vais pas être impacté par les accès concurrents.

    Par contre, pour info, si je dois résoudre un tel problème, est-ce que le simple fait de mettre la méthode 'getInstance()' en synchronized sera efficace ?

    Merci !

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

Discussions similaires

  1. Compléter des lignes pour des valeurs inexistantes
    Par patgabjoe dans le forum SQL
    Réponses: 5
    Dernier message: 20/11/2012, 10h06
  2. Des problèmes pour ajouter valeur dans une ArrayList
    Par Fused dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 07/11/2008, 17h28
  3. [JTable] afficher des Chekbox pour des valeurs booléennes
    Par grabriel dans le forum Composants
    Réponses: 11
    Dernier message: 21/02/2007, 11h37
  4. Valeur pour des checkbox et des boutons radio pour MySQL
    Par mounirha dans le forum Administration
    Réponses: 1
    Dernier message: 19/04/2006, 00h54
  5. [CR] Générer des espaces pour une valeur champ
    Par newpress dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 17/02/2005, 18h43

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