# Foreignkeys einer Tabelle rausfinden (Metadaten)



## JimKnopf (26. Apr 2007)

Hallo,

ich möchte mir die Foreignkeys und derren abhängigen Tabellen aller Tabellen einer Datenbank ausgeben lassen.
So, dass ich am ende im Prinzip alle Tabellen kenne, welche von eine Tabelle benötigt, um einen Eintrag zu erhalten. 
Am besten wäre es, wenn ich diese über die Metainformationen einer Connection oder eines resultSets erhalen könnte.
Jedoch finde ich keine Methode, die mir aus einer Tabelle die Foreignkey und derren Tabellen liefert.
Bei dem MSSql-Server 2000 den ich verwende, ist eine Funktion dabei, die dies für einen erledigt. Jedoch möchte ich meinen Java-Code Datenbank unabhängig halten und daher die Foreignkeys lieber aus den Metadaten einer Tabelle erhalten.

Umgebung:
- Java 6.0
- Jtds-Treiber
- MSSql-Server 2000


----------



## Ullenboom (27. Apr 2007)

Da könnte http://db.apache.org/ddlutils/api/org/apache/ddlutils/platform/DatabaseMetaDataWrapper.html#getForeignKeys(java.lang.String) helfen.


----------



## JimKnopf (27. Apr 2007)

Super, danke dir.
Genau sowas habe ich gesucht . Nur schade, dass es anscheinend keine Möglichkeit gibt, das mit hauseigenen Bibliotheken vom JDK umzusetzen (zumindestens wuesste ich nicht wie).

EDIT:
Habe mir grade die beschreibung zu dem Package angesehen,

db.apache.org/ddlutils/#What_is_DdlUtils

und so wie ich das verstanden habe, müsste dafür die Datenbankbeschreibung als XML-File von mir bereit gestellt werden. Da mir aber ja grade diese Struktur der Datenbank unbekannt ist, funktioniert das leider mit diesem Package doch nicht.


----------



## Ullenboom (27. Apr 2007)

Och. Das vereinfacht ja nur den Aufruf der JDBC-Metadaten:

    /**
     * Convenience method to return the foreign key meta data using the configured catalog and
     * schema pattern.
     * 
     * @param tableNamePattern The pattern identifying for which tables to return info
     * @return The foreign key meta data
     * @throws SQLException If an error occurred retrieving the meta data
     * @see DatabaseMetaData#getImportedKeys(java.lang.String, java.lang.String, java.lang.String)
     */
    public ResultSet getForeignKeys(String tableNamePattern) throws SQLException
    {
        return getMetaData().getImportedKeys(getCatalog(), getSchemaPattern(), tableNamePattern);
    }

Dahinter steckt nur http://java.sun.com/j2se/1.4.2/docs/api/java/sql/DatabaseMetaData.html#getImportedKeys(java.lang.String,%20java.lang.String,%20java.lang.String)


----------



## JimKnopf (27. Apr 2007)

Perfect, danke dir.
Habe diese Methode einfach nicht gefunden -.-.
Habe die Ganze Zeit nach etwas gesucht wie getForeignKeysFrom( String tablename ) oder der gleichen .

Das hilft mir weiter.

Edit:
Super schnelle antwort  :shock:   :toll:


----------

