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 :

Cle etrangere : Question tres complique for me


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 3
    Par défaut Cle etrangere : Question tres complique for me
    Salut a tous et bonne année !!!
    j'ai une question assez bizarroïde à vous soumettre car je n'ai malheureusement pas pu trouver....
    alors mon but est d'identifier les clé étrangères d'une tables via jdbc :
    - avec le DatabaseMetaData, il est possible de récupérer la liste des tables des champs, des clé primaires (et ce quelques soit la base et le sgbdr)

    mais je n'arrive pas a trouver une méthode qui me permette de trouver les clé etrangeres d'une table
    quelqu'un connaitrait-il une solution a ce problème ???
    merci d'avance

  2. #2
    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 devrais utiliser getCrossReference(...)

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

  3. #3
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 3
    Par défaut
    merci bcp!
    je vais regarder cette fonction et je vais essaye de ce pas

  4. #4
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 3
    Par défaut
    j'ai regarde mais j'ai un peu de mal avec cette fonction:
    je dispose d'une table B avec comme cle primaire PRIM_B
    une table A avec comme cle primaire PRIM_A et une cle secondaire FOREIGN_A referencant PRIM_B de la table B

    voici mon code :
    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
     
            Connection conn
            dmd = conn.getMetaData();
            valPrimaryCatalog = conn.getCatalog();
            valPrimarySchema = null;
            valPrimaryTable = "%";
            valForeignCatalog = null;
            valForeignSchema = null;
            valForeignTable = null; 
            res = dmd.getCrossReference(valPrimaryCatalog, valPrimarySchema,
                    valPrimaryTable, valForeignCatalog, valForeignSchema,   valForeignTable);
            ResultSetMetaData rsmd = res.getMetaData();
            int cols = rsmd.getColumnCount();
            while (res.next()) {
                strOut = getName() + " :: ";
                for (int i = 1; i <= cols; i++) {
                    strOut = strOut + " | ";
                    strOut = strOut + (res.getMetaData().getColumnName(i)) + "=";
                    strOut = strOut + (res.getString(1));
                }
                System.out.println(strOut);
            }
            res.close();
    et malheureusement ca marche pas genial.... ca me renvoie un tableau avec que des null... je cherche a obtenir le fait que FOREIGN_A est une cle etrangere referencant PRIM_B de la table B
    donc si une idee?? merci

  5. #5
    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
    Bon, j'ai fait un test avec getCrossReference(...) et effectivement, ça pas idéal parce qu'il faut connaitre et la table source et la table cible...(???)
    Par contre, tu devrais pouvoir t'en sortir avec getExportedKeys(...).
    Tu génère la liste des tables et tu l'utilises comme source de cette méthode
    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
     
    Connection target = null;
     
    try
    {
        Class.forName("com.mysql.jdbc.Driver");
        target = DriverManager.getConnection("jdbc:mysql:///gtc", "root", "ob");
     
        DatabaseMetaData dbmd = target.getMetaData();
        List<Map> list = new ArrayList<Map>();
        Map<String, String> map = new HashMap<String, String>();
     
        String tableName = null;
        ResultSet rs = dbmd.getTables(null, null, "%", new String[]{"TABLE"});
        while (rs.next())
        {
            tableName = rs.getString(3);
            ResultSet rs2 = dbmd.getExportedKeys(null, null, tableName);
            while (rs2.next())
            {
                ResultSetMetaData rsmd = rs2.getMetaData();
                map = new HashMap<String, String>();
                for ( int i = 0; i < rsmd.getColumnCount(); i++ )
                {
                    map.put(tableName+"."+rsmd.getColumnName(i+1), rs2.getString(i+1));
                    System.out.println(tableName+"."+rsmd.getColumnName(i+1) + " : " + rs2.getString(i+1) );
                }
                list.add(map);
            }
        }
    }
    catch (Throwable t)
    {
        System.out.println("Erreur : " + t.getMessage());
    }
    finally
    {
        try { target.close(); } catch (Throwable t) {}
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 1
    Dernier message: 31/08/2013, 05h56
  2. Cle etrangere
    Par berg dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/01/2005, 01h48
  3. clées etrangeres
    Par kkhaled dans le forum Bases de données
    Réponses: 5
    Dernier message: 06/07/2004, 20h45
  4. Plusieurs clés Etrangères ?
    Par maahta dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 06/10/2003, 21h22
  5. supprimer une ligne avec cle etrangere
    Par BaBas dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/07/2003, 12h24

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