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

Servlets/JSP Java Discussion :

afficher en jsp le nom des colonnes de ma base oracle [Débutant(e)]


Sujet :

Servlets/JSP Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut afficher en jsp le nom des colonnes de ma base oracle
    Bonjour,

    Comme vous pouvez le voir je suis mega noob. Quelqu'un peut-il m'aider à afficher le résultat de cette requête ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vector w=db.requete_query("SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME='ma_table'");
    J'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(int j=0;j<w.size();j++){
           out.println(""+((HashMap)w.get(j)).get(mais la je ne sais pas ce que je dois mettre :());
    }
    Merci à vous. Je suis preneur de tous bons conseils

    hpl76

  2. #2
    Membre confirmé Avatar de Mayhem555
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 89
    Par défaut
    Salut,

    Pourrais-tu détailler comment tu procèdes pour mettre le résultat de ta query dans un vector (en gros, le code de la méthode requete_query(..) ).

    Ton Vector contient-il des String ? Je ne comprends pas pourquoi tu cherches à faire un cast vers une HashMap pour afficher cela avec un println.

    Avec un peu plus d'info je pourrai t'aider

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    Bonjour,

    Mayhem, comme le groupe de musique ?

    Bref revenons à nos moutons, je débute vraiment en java et je pars depuis une liste de classes et fichiers, des notions que je ne maitrise pas. Je suis noob en la matière étant phpiste/graphiste à la base.

    Comment peut-on faire plus communément ce que je cherche à faire ?
    Y'a plus simple je suppose ?

    Voici l'extrait demandé, comme je t'ai dis, j'avoue ne pas tout comprendre, car je ne connais pas et j'ai pas pris non plus le temps de regarder (faute de temps d'ailleurs), mais je sais au moins exploiter le truc et faire la requête comme t'as pu voir :

    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
    public Vector requete_query(String Req_SQL) {
     
    		Vector res = new Vector();
    		try {
    			//System.out.println("Execution de la requete");
                            ResultSet resultat=null;
                            req=connexion.createStatement();
                            resultat = req.executeQuery(Req_SQL);
     
                            int i;
                            ResultSetMetaData meta = resultat.getMetaData();
                            while(resultat.next()){
                                   HashMap column = new HashMap();
                                   for(i=0;i<meta.getColumnCount();i++){
                                       column.put(meta.getColumnName(i+1),resultat.getObject(i+1));
                                   }
                                   res.add(column);
                            }
                            req.close();
    		}
    		catch (SQLException erreur) {
    			System.out.println(erreur.getMessage());
     
    		}
    		System.out.println(" - Reussi requete"+Req_SQL);
                    System.out.println(res.size());
    		return res;
    	}
    Par avance merci.

    hpl76

  4. #4
    Membre confirmé Avatar de Mayhem555
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 89
    Par défaut
    -Oups, mon post précédent est à effacer-

    Salut,

    Ton code est tout à fait classique...après le choix des structures de données Vector et HashMap pour stocker le contenu de ton ResultSet (ie: le résultat "brut" de ta query) n'appartient qu'à toi et dépend de l'utilisation ultérieure que tu vas faire de ces résultats.

    Dans le cas de ta query du premier post, c'est pour obtenir la liste des champs d'une table. Donc techniquement tu vas obtenir un résultat avec une seule colonne, et plusieurs lignes (chaque ligne correspondant au nom d'un champ de la table )

    Si tu veux te cantoner à cette fonctionnalité, pas besoin d'implémenter de HashMap.

    Parce que dans ton cas, chaque HashMap column ne contient qu'un seul couple (clé, objet) (puisque meta.getColumnCount() vaut 1), donc tu te retrouves avec un Vector contenant n HashMap n'ayant qu'une valeur. Ici c'est un peut-être un peu lourd, mais ce n'est pas faux et ça marche.

    Après, si c'est juste uniquement pour avoir la liste des champs, tu peux faire plus simple (mais ce n'est pas une solution qui s'applique à tous les résultats de query) :

    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
     
    public Vector requete_query(String Req_SQL) {
     
    		Vector res = new Vector();
    		try {
    			//System.out.println("Execution de la requete");
                            ResultSet resultat=null;
                            req=connexion.createStatement();
                            resultat = req.executeQuery(Req_SQL);
                            String value = null ;
     
                            int i;
                            ResultSetMetaData meta = resultat.getMetaData();
                            while(resultat.next()){                     
                                   res.add( (String) resultat.getObject(1) );
                            }
                            req.close();
    		}
    		catch (SQLException erreur) {
    			System.out.println(erreur.getMessage());      
    		}
    		System.out.println(" - Reussi requete"+Req_SQL);
                    System.out.println(res.size());
    		return res;
    	}
    Quelque chose comme ça...bien sûr il faut que ton resultset ne contienne qu'une colonne. De plus, j'ai fait un cast vers une chaîne de caractères car dans ton cas c'est le type le plus approprié.

    Tu te retrouve alors avec un Vector de String, plutôt qu'un vector de HashMap.


    Si tu veux par contre garder ton code, et faire un println avec ça, tu peux quand même faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //obtenir le nom du j-ieme champs
    String s = "" + (String) w.get(j).get("COLUMN_NAME") ;
    System.out.println (s) ;
    Car si tu regardes ton code, dans chaque HashMap tu met un couple (Nom de Colonne, Valeur)...or ton nom de colonne est toujours le même (il vient de ta requete SQL : COLUMN_NAME), c'est donc ta clé.

    Mes deux lignes de codes juste au dessus prennent en compte que ta clé est un objet String

    Voilà, si tu as d'autres questions

    PS : Oui, Mayhem vient du groupe de musique

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    Hail de rigueur et merci pour tout ce complément d'info, je comprends bien mieux certaines choses. L'idéal serait de garder le hashmap en effet, car j'utilise ce "système" dans bien des cas.

    J'ai par conséquent essayé d'adapter les 2 p'tites lignes qui, je pensais, fonctionneraient logiquement vu l'explication claire fournie mais avant toute exécution la ligne est soulignée en rouge avec le point d'exclamation et le toutime sous netbeans. Au survol, ca me met : inconvertible types - found : java.lang.Object.get - required : java.lang.String.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    symbol  : method get(java.lang.String)
    location: class java.lang.Object
            String s = "" + (String) w.get(j).get("COLUMN_NAME");
                                          ^
    1 error

    ? J'ai pas fait ce qui fallait ?

    hpl76

  6. #6
    Membre confirmé Avatar de Mayhem555
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 89
    Par défaut
    Hail
    Effectivement, c'est une erreur de ma part. Désolé

    Déjà, les classes Vector et HashMap sont des classes génériques, c'est à dire qu'il est préférable de spécifier quels types elles vont contenir (Java étant quand même typé ), sinon le compilo devrait te renvoyer des warnings.

    Alors, bien évidemment, ça dépend de ce que tu as dans ta base, mais dans ton cas tu pourrais déclairer les handlers ainsi (par exemple)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Vector<HashMap> w = new Vector<HashMap>() ;
    HashMap<String, String[]> column = new HashMap<String, String[]>() ;
    (bien que d'autres peuvent passer par des classes abstraites). Je considère que ta clé est un String, et que les données sont dans un tableau de string pointé par ta clé.

    Il faut rajouter une étape :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //obtenir le nom du j-ieme champs
    HashMap<String, String[]> hm = (HashMap<String, String[]>) w.get(j) ;
    String s = "" + hm.get("COLUMN_NAME")[0] ;  //prendre uniquement le premier élément du String[] pointé par la clé "COLUMN_NAME"
    System.out.println (s) ;
    Attention quand même, maintenant que ta HashMap est un peu plus typée, il faut adapter lorsque tu va mettre des données dedans (avant de faire ton put, vérifier que la clé est une string et que les données sont dans un String[]). D'ailleurs plutôt qu'un String[] (que j'utilise ici depuis le début) qui est assez primitif, tu peux utiliser des collections qui sont bien mieux foutues (Vector, ArrayList, ...).

    Voilà, en espérant que ceci marche. A+

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Si je comprends bien ton besoin, tu veux afficher le résultat d'une requête en incluant, en en-tête de colonne, le nom de la colonne de la table, c'est bien ça ?

    Si oui, il est totalement inutile de t'enquiquiner avec un Vecteur et autre Map.
    A ta place, je traiterais directement le tout en revoyant une List de List dont le premier élément représente l'en-tête de colonne.

    Ci-joint un exemple un peu "bourrin"
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    package test;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
     
    public class ExecutionSQL
    {
     
        /**
         * @param args
         */
        public static void main(String[] args)
        {
            try
            {
                List<List<String>> list = executeSQLRequest("SELECT * FROM utilisateur_notes");
                Iterator<List<String>> it = list.iterator();
                while (it.hasNext())
                {
                    StringBuilder sb = new StringBuilder(128);
     
                    Iterator<String> it2 = it.next().iterator();
                    while (it2.hasNext())
                    {
                        sb.append(it2.next()).append(", ");                
                    }
                    System.out.println(sb.substring(0, sb.length()-2));
                    sb.delete(0, sb.length());
                }
            }
            catch (Exception e)
            {
     
            }
        }
     
        public static List<List<String>> executeSQLRequest(String requete) throws Exception
        {
            List<List<String>> list = new ArrayList<List<String>>();
            Connection connection = null;
            try
            {
                Class.forName("com.mysql.jdbc.Driver");
                connection = DriverManager.getConnection("jdbc:mysql://localhost/vigile", "root", "ob");
     
     
                ResultSet rs = connection.createStatement().executeQuery(requete);
                ResultSetMetaData rsmd = rs.getMetaData();
     
                List<String> data = new ArrayList<String>();
                for (int i=0; i < rsmd.getColumnCount(); i++)
                {
                    data.add(rsmd.getColumnName(i+1));
                }
                list.add(data);
     
                while (rs.next())
                {
                    data = new ArrayList<String>();
                    for (int i=0; i < rsmd.getColumnCount(); i++)
                    {
                        data.add(rs.getString(i+1));
                    }
                    list.add(data);
                }
            }
            catch (Exception e)
            {
            }
            finally
            {
                if (connection != null)
                    connection.close();
            }
            return list;
        }
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    Re,

    J'ai dû mal à voir/comprendre comment implémenter ce code. J'ai essayé tel quel, brut de décofrage, en vain...Je ne pensais pas qu'une action au demeurant si simple pouvait s'avérait si compliqué à mettre en place

  9. #9
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Tu as changé les paramètres de connexion et la requête... ?

    Alors, ce qui peut poser problème :
    - il ne trouve pas le jar du driver JDBC (à mettre dans le répertoire /WEB-INF/lib)
    - mauvais profil / mot de passe
    -...

    Quelle est l'erreur au juste ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    MERCI VRAIMENT A TOUS POUR VOTRE AIDE, un proche s'est posé également sur mon problème et a donné la solution que voici (ca peut servir )

    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
    Vector res = new Vector();
            try {
                            PreparedStatement ps;
                            Statement req;
                            ConnectionDB db=new ConnectionDB();             
                            Connection connexion=db.connect();
                            ResultSet resultat=null;
                            req=connexion.createStatement();
                            resultat = req.executeQuery("SELECT * FROM  LA TABLE");
                            ResultSetMetaData meta = resultat.getMetaData();
                            int i=0;
                            for(i=0;i<meta.getColumnCount();i++){
                            res.add(meta.getColumnName(i+1));
                            }
                            req.close();
                            out.println(res);
            }
            catch (SQLException erreur) {
                System.out.println(erreur.getMessage());
     
            }
    Bien à vous !

    hp HELL

    Ps : n'hésitez pas à lâcher vos com

  11. #11
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par hpl76 Voir le message
    Ps : n'hésitez pas à lâcher vos com
    Ben, le code que tu montres ne fait que mettre le nom des colonnes dans le Vector
    Il manque des choses, et dans tous les cas, tu ne m'as pas dit ce qui ne fonctionnait pas dans ce que je t'ai donné
    (parce que chez moi, ça fonctionnait sans problème)

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Membre confirmé Avatar de Mayhem555
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 89
    Par défaut
    Effectivement hpl76, le code que tu présente marche mais ne fonctionne que pour récupérer le nom des colonnes dans un vector.

    Je pensais que tu voulais quelques chose qui soit plus général (genre qui puisse récupérer des colonnes et des résultats), dans ce cas là le mieux et de se créer soit même une classe ayant la forme la plus intuitive qu'on souhaite.

    Mais si tu as trouvé ton bonheur alors pas de souci Par contre, nulle part tu fais de référence au JSP (à part dans le titre).

    A+

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    J'aurai en effet voulu pouvoir sortir tous mes enregistrements dans un tableau généré via JSP mais j'ai les infos que je voulais à savoir le nom de tous les champs d'une base inconnue. Envoies-moi un mp histoire de voir ce que tu écoutes d'autre vilain sataniste

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

Discussions similaires

  1. Nom des tables dans une base oracle
    Par toutounesan dans le forum VB.NET
    Réponses: 5
    Dernier message: 09/07/2011, 00h15
  2. Afficher les noms des colonnes d'une table
    Par witch dans le forum Requêtes
    Réponses: 10
    Dernier message: 07/10/2008, 13h25
  3. [JTable] les noms des colonnes de s'affichent pas
    Par macben dans le forum Composants
    Réponses: 6
    Dernier message: 25/04/2008, 11h03
  4. [WD10] Afficher les noms des colonnes
    Par devalender dans le forum WinDev
    Réponses: 4
    Dernier message: 24/02/2006, 14h38
  5. Noms des colonnes ne s'affichent pas dans un JTable
    Par Bourdet dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 07/07/2005, 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