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

Collection et Stream Java Discussion :

[Avancés pour débutante]Stockage d'une table (tableau associatif)


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 115
    Points : 47
    Points
    47
    Par défaut [Avancés pour débutante]Stockage d'une table (tableau associatif)
    Kikou!

    Et bien je cherche à créer un tableau en java qui doit représenter une table de ce type, dont les dimensions sont aléatoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
          num_ligne           colonne 1             colonne 2
    -------------------|-------------------|-------------------|
             1               |         salut         |         tutu          |
             2               |         salut         |         tutu          |
    Ce que je dois garder est la structure. C'est à dire que je dois pouvoir savoir en fonction du nom de la colonne et du numero de ligne le contenu de la cellule...

    Je vois pas comment faire...

    REDEFINITION DU PROBLEME AU POST DU BAS DE CETTE PAGE!

  2. #2
    Membre régulier Avatar de Thor Tillas
    Inscrit en
    Octobre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 113
    Points : 90
    Points
    90
    Par défaut
    Salut,

    juste une question... c'est pour un exercice pédagogique ou tu retire ca d'une base de donnée...

    Parce que si c'est d'une base de donnée y a des structures déjà toute faite pour ca...
    Au travail, il y a deux sortes de personnes. Ceux qui ont un pistolet chargé, et ceux qui creusent. Moi je creuse...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 115
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par Thor Tillas
    Salut,

    juste une question... c'est pour un exercice pédagogique ou tu retire ca d'une base de donnée...

    Parce que si c'est d'une base de donnée y a des structures déjà toute faite pour ca...
    Je prends ca d'une bd, mais ce n'est pas du tout stocké de la sorte...
    Toutefois, les 2 solutions m'interessent!
    Please help..

  4. #4
    Membre régulier Avatar de Thor Tillas
    Inscrit en
    Octobre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 113
    Points : 90
    Points
    90
    Par défaut
    Pour les bases de données java fournie tout un set d'outil très pratique... Grace à JDBC.

    Tu peux faire tout ce que tu veux avec même insérer de nouvelle ligne dans ta base. Cela permet en outre de faire des "select" avec une requête sql de ton choix et donc tu peux former n'importe quelle vue de tes tables.

    Ne sachant pas le nom de ta BD ca va être dur de donner un exemple, mais si c'est MySQL, ORACLE ou autre base connue tu risque d'en trouver vraiment beaucoup sur le net... bonne chasse

    Pour la partie pédagogique j'ai pas encore de solution très propres... si je trouve quelque chose je t'avertis.
    Au travail, il y a deux sortes de personnes. Ceux qui ont un pistolet chargé, et ceux qui creusent. Moi je creuse...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 115
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par Thor Tillas
    Pour les bases de données java fournie tout un set d'outil très pratique... Grace à JDBC.

    Tu peux faire tout ce que tu veux avec même insérer de nouvelle ligne dans ta base. Cela permet en outre de faire des "select" avec une requête sql de ton choix et donc tu peux former n'importe quelle vue de tes tables.

    Ne sachant pas le nom de ta BD ca va être dur de donner un exemple, mais si c'est MySQL, ORACLE ou autre base connue tu risque d'en trouver vraiment beaucoup sur le net... bonne chasse

    Pour la partie pédagogique j'ai pas encore de solution très propres... si je trouve quelque chose je t'avertis.
    Pour ce qui est de la bd je vois ce que tu veux dire, mais ce n'est pas vraiment possible dans mon cas.

    Il faut simplement que je puisse créer un tableau associatif il me semble, je ne vois pas comment...

  6. #6
    Membre confirmé Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Points : 510
    Points
    510
    Par défaut
    Citation Envoyé par delma
    Ce que je dois garder est la structure. C'est à dire que je dois pouvoir savoir en fonction du nom de la colonne et du numero de ligne le contenu de la cellule...

    Je vois pas comment faire...
    Cela ressemble fortement à des problèmes de base de données, effectivement :-).. c'est pour un professeur ?...

    Il y a plein de solutions possibles, mais les tableaux associatifs ne sont pas ce qu'il y a de plus pratique en Java.

    L'une des solutions les plus habituelles est basée sur des objets java simples, qui lient - on dit binding chez les spécialistes - les colonnes à des classes ; ici nous aurions :
    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
     
    public class Ligne
    {
     private int num_ling;
     private String colonne1;
     private String colonne2;
     
     public class Ligne()
     {
      ... divers ...
     }
     
     public int getNumLigne()
     {
      return num_ligne;
     }
     
     public setNumLigne(int num)
     {
      num_ligne = num;
     }
     .. etc...
    Tu vois que tu disposes d'une classe qui colle aux noms des colonnes. Il y a des outils qui font ça automatiquement.

    Après, il faut mettre ça dans un tableau. Et puis, il faut écrire le code des requêtes. Ce n'est compliqué, mais cela peut être un peu fastidieux. Et il y a déjà plein d'outils et de bases légères qui font ça simplement.

    Si tu vois le principe, peux-tu nous préciser dans quelle direction tu souhaites aller ?

  7. #7
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Si tu veut stocker dans une seule collection, il te faudra utiliser par exemple une ArrayList d'ArrayList :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<ArrayList<Object>> table = new ArrayList<ArrayList<Object>>();
    Ainsi, pour récupérer une valeur tu peut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table.get(column).get(line);
    Et tu peut stocker le nom de la colonne dans la ligne 0.

    Ce n'est certes pas optimal, mais ca marche et c'est tout simple.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 115
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par spekal
    Cela ressemble fortement à des problèmes de base de données, effectivement :-).. c'est pour un professeur ?...

    Il y a plein de solutions possibles, mais les tableaux associatifs ne sont pas ce qu'il y a de plus pratique en Java.

    L'une des solutions les plus habituelles est basée sur des objets java simples, qui lient - on dit binding chez les spécialistes - les colonnes à des classes ; ici nous aurions :
    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
     
    public class Ligne
    {
     private int num_ling;
     private String colonne1;
     private String colonne2;
     
     public class Ligne()
     {
      ... divers ...
     }
     
     public int getNumLigne()
     {
      return num_ligne;
     }
     
     public setNumLigne(int num)
     {
      num_ligne = num;
     }
     .. etc...
    Tu vois que tu disposes d'une classe qui colle aux noms des colonnes. Il y a des outils qui font ça automatiquement.

    Après, il faut mettre ça dans un tableau. Et puis, il faut écrire le code des requêtes. Ce n'est compliqué, mais cela peut être un peu fastidieux. Et il y a déjà plein d'outils et de bases légères qui font ça simplement.

    Si tu vois le principe, peux-tu nous préciser dans quelle direction tu souhaites aller ?
    Merci beaucoup pour vos réponses! En ce qui concerne les objets, ce n'est pas évident parce que je ne sais pas à l'avance le nombre de colonnes ni de lignes. Ce qui fait que je suis obligée de travailler avec des ArrayList, non??

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 115
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par wichtounet
    Si tu veut stocker dans une seule collection, il te faudra utiliser par exemple une ArrayList d'ArrayList :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<ArrayList<Object>> table = new ArrayList<ArrayList<Object>>();
    Ainsi, pour récupérer une valeur tu peut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table.get(column).get(line);
    Et tu peut stocker le nom de la colonne dans la ligne 0.

    Ce n'est certes pas optimal, mais ca marche et c'est tout simple.
    Dans ton type d'utilisation, je ne vois pas comment ajouter des lignes ou des colonnes.

  10. #10
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par delma
    Dans ton type d'utilisation, je ne vois pas comment ajouter des lignes ou des colonnes.
    Pour ajouter une colonne tu peut faire comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ArrayList<Object> aColumn = new ArrayList<Object>();
    aColumn.add("nom de la colonne");
     
    table.add(aColumn);
    Pour ajouter une ligne tu peut faire comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table.get(column).add(taValeur);
    Le mieux, c'est encore d'encapsuler tout ca dans une classe Table avec des méthodes addColumn, addLine, getValue, getTitleOfColumn, getValuesOfColumn, ...

    Ce serait plus simple.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 115
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par wichtounet
    Pour ajouter une colonne tu peut faire comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ArrayList<Object> aColumn = new ArrayList<Object>();
    aColumn.add("nom de la colonne");
     
    table.add(aColumn);
    Pour ajouter une ligne tu peut faire comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table.get(column).add(taValeur);
    Le mieux, c'est encore d'encapsuler tout ca dans une classe Table avec des méthodes addColumn, addLine, getValue, getTitleOfColumn, getValuesOfColumn, ...

    Ce serait plus simple.
    Je comprends l'idée de la classe table, mais comment pouvoir indiquer ou je veux insérer ma ligne ou colonne... c'est tout par positionnement par un indice int non?
    Je vois pas trop comment faire la classe..

  12. #12
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par delma
    Je comprends l'idée de la classe table, mais comment pouvoir indiquer ou je veux insérer ma ligne ou colonne... c'est tout par positionnement par un indice int non?
    Je vois pas trop comment faire la classe..
    C'est pas très compliqués...

    Tu peut faire quelque chose comme ca :


    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
    public class Table(){ArrayList<ArrayList<Object>> table = new ArrayList<ArrayList<Object>>();
     
     
    public int addColumn(String columnName){[INDENT]ArrayList<Object> column= new ArrayList<Object>();
    aColumn.add(columnName);
     
    table.add(aColumn);
     
    return table.size() - 1;//On renvoie la position de la colonne
     
    }
     
     
    public int addLine(Object value, int column){table.get(column).add(value);
     
    return table.get(column).size() - 1;//On renvoie la position de la ligne
     
    }
     
    ...
     
    }
    Tu as compris le principe ?

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 115
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par wichtounet
    C'est pas très compliqués...

    Tu peut faire quelque chose comme ca :


    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
    public class Table(){ArrayList<ArrayList<Object>> table = new ArrayList<ArrayList<Object>>();
     
     
    public int addColumn(String columnName){[INDENT]ArrayList<Object> column= new ArrayList<Object>();
    aColumn.add(columnName);
     
    table.add(aColumn);
     
    return table.size() - 1;//On renvoie la position de la colonne
     
    }
     
     
    public int addLine(Object value, int column){table.get(column).add(value);
     
    return table.get(column).size() - 1;//On renvoie la position de la ligne
     
    }
     
    ...
     
    }
    Tu as compris le principe ?
    Merci bcp de prendre le temps!

    Bon pas tout à fait compris...
    Comment dirais mon prof de prog, il manque quelques commentaires...

    Mais je ne suis pas sur en fait que cela correpond é ce que je veux faire. Il faut peut être que je redéfinisse ce que je veux faire...

    Je dois récupérer des données qui sont stockées dans une base de données sous cette forme.



    Les entetes correpondent au nom des colonnes et les réponses, aux cellules du tableau, avec un attribut numero_ligne qui indique de quelle ligne il s’agit.

    Je dois ensuite récupérer ces données pour en faire une strucutre en XML qui me permettent de la représenter sous forme de tableau. Je pensais utiliser la strucutre suivante:

    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
     
    <colonne1>
        <entete1>le nom de l'entete</entete1>
        <ligne 1> le contenu de la cellule à la ligne 1 sous l'entete 1</ligne 1>
        <ligne 2> le contenu de la cellule à la ligne 2 sous l'entete 1</ligne 2>
        <ligne 3> le contenu de la cellule à la ligne 3 sous l'entete 1</ligne 3>
        <ligne n> le contenu de la cellule à la ligne n sous l'entete 1</ligne n>
    </colonne1>
    <colonne2>
        <entete1>le nom de l'entete</entete1>
        <ligne 1> le contenu de la cellule à la ligne 1 sous l'entete 2</ligne 1>
        <ligne 2> le contenu de la cellule à la ligne 2 sous l'entete 2</ligne 2>
        <ligne 3> le contenu de la cellule à la ligne 3 sous l'entete 2</ligne 3>
        <ligne n> le contenu de la cellule à la ligne n sous l'entete 2</ligne n>
    </colonne2>
    Et je cherche un moyen simple de représenter c'est données en java, que je maitrise ma très bien...

    Dans le code que tu a écrit, je ne comprends pas vraiment comment pouvoir récupérer le contenu d'une cellule en fonction de son numero de ligne et de son entete (String)??

    Je suis un peu perdue..

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/08/2006, 13h08
  2. Réponses: 1
    Dernier message: 18/04/2006, 23h16
  3. Réponses: 3
    Dernier message: 10/02/2006, 15h48
  4. Requête pour remplacer caractères dans une table
    Par elliott1961 dans le forum Installation
    Réponses: 5
    Dernier message: 16/01/2006, 01h47
  5. changement de type pour un champ dans une table
    Par Missvan dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 23/02/2004, 15h26

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