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

PostgreSQL Discussion :

[Problème] obtenir la table d'une colonne d'une requête


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 28
    Par défaut [Problème] obtenir la table d'une colonne d'une requête
    Bonjour tout le monde

    alors alors, voici ce que j'utilise :
    - base postgres
    - driver postresql avec Java

    Ce que j'essaye de faire en vain, c'est obtenir la table d'une colonne qui provient du résultat d'une requête. Je cherche une solution sans avoir à parser ma requête en tant que chaîne de caractère.

    Si j'ai la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select col1, col2, col3 from tab1,tab2
    Comment savoir à quelle table appartient col1, col2 ou col3 ?
    j'ai voulu essayer la classe ResultSetMetaData, mais cela ne le permet pas sur une telle requête.

    je vous remercie d'avance si vous avez une idée ou une solution

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2
    Par défaut
    Faudrait savoir ce que tu essais de faire. En principe, rien n'empêche le même nom de colonne d'être utilisé dans deux tables différentes. En fait, le vrai nom unique d'une colonne est composé du nom du schemas, de la table et du nom de la colonne (eg, public.employee.name).

    Mais si tu veux juste accéder aux noms des colonnes (qui peuvent être des alias), tu peux les extraires des métadonnées du ResultSet

    (J'ai piqué ce code ici : http://www.devx.com/dbzone/Article/27992/1954?pf=true)

    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
     
    Statement statement = connection.createStatement();
    ResultSet resultSet = statement.executeQuery("select * from EMPLOYEE");
    ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
     
    int numColumns = resultSetMetaData.getColumnCount();
    for (int i=1; i<(numColumns+1); i++)
    {
    String columnName = resultSetMetaData.getColumnName(i);
    	String columnTypeName = resultSetMetaData.getColumnTypeName(i);
    	int columnPrecision = resultSetMetaData.getPrecision(i);
    	int columnScale = resultSetMetaData.getScale(i);
    	System.out.println(columnName + ": " +  columnTypeName + " - " 
    		+ " Precision: " + columnPrecision + ", " + " Scale: " 
    		+ columnScale); 
    }
    d'un autre coté, si tu veux simplement connaitre la structure des tables, cette information est aussi disponible par les métadonnées (http://java.sun.com/j2se/1.4.2/docs/...eMetaData.html) ou par en faisant une requêtes dans le tables systèmes de postgresql



    pour avoir les tables : select * from pg_tables

    pour avoir les colonnes : select * from pg_attribute (en faisant une jointure avec pg_tables, on a la vue complète)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 28
    Par défaut
    oups désolé de ce retour tardif. merci en tout cas de ce début de précision

    En fait j'ai besoin d'une information de ce ResultSetMetaData, et la fonction dont j'ai besoin est getTableName(int i) qui va en fait retourner la table d'appartenance de la colonne située à l'indice i.
    Hors cette fonction renvoie (dans le cas de psotgresql) une chaîne vide "".

    Le contexte dans lequel j'utilise cela, c'est avec deux tables qui ont une colonne qui porte le même nom. Dans un cas c'est la clef primaire de la table, dans l'autre cas c'est la clef étrangère de la table.
    Ce à quoi cela va me servir, c'est de savoir si la colonne que je suis en train de traiter avec mon ResultSetMetaData, c'est de savoir si elle provient de la table où elle est clef étrangère, ou de la table où elle est clef primaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    exemple  :
    T1 (ma_colonne PKEY)
    T2 (ma_colonne FKEY)
     
    requête1 = SELECT ma_colonne FROM T1;
    requête2 = SELECT ma_colonne FROM T2;
    requête2 = SELECT T1.ma_colonne,T2.ma_colonne FROM T1, T2;
    si je lance chacune des requêtes, il faut que j'arrive à trouver dans quelle requête c'est une clef primaire et dans laquelle c'est un clef étrangère. Mais pour cela il me faut le nom de la colonne et le nom de la table, sans avoir à parser la requête SQL. Car là les requêtes sont "bateau" mais si j'ai des requêtes imbriquées de partout, ça devient l'enfer. Et puis c'est surtout que je préfère éviter de coder un parseur si je peux récupérer cela avec les métadonnées.

    Pour info, j'ai déjà le script SQL qui me permet avec le nom d'une colonne et le nom d'une table de savoir si c'est une clef primaire ou étrangère avec les tables systèmes.

    Dans tous les cas, la fonction getTableName() renverra toujours une chaîne vide. Donc je ne sais pas comment faire ...

    merci d'avance pour d'autres retours

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 28
    Par défaut
    personne n'a jamis essayé une telle chose ?

Discussions similaires

  1. Réponses: 8
    Dernier message: 28/11/2011, 11h40
  2. copier une colonne d'une BDD1 vers une BDD2
    Par brendatours dans le forum Débuter
    Réponses: 1
    Dernier message: 09/03/2009, 16h20
  3. [E-00] Syntaxe pour insérer une ligne ou une colonne dans une feuille
    Par Benjycool dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/02/2009, 09h27
  4. supprimer une ligne et une colonne d'une matrice
    Par nessing dans le forum C++Builder
    Réponses: 8
    Dernier message: 14/08/2007, 15h42
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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