2010-02-06 5 views
9

Ich schreibe eine Java-Anwendung. Ich habe ein ResultSet. Jetzt möchte ich den Spaltennamen des Primärschlüssels der Tabelle herausfinden.Wie kann ich den Spaltennamen des Primärschlüssels einer Datenbanktabelle aus dem ResultSet- oder ResultSetMetaData-Objekt in JAVA abrufen?

Ist es möglich, diesen Column-Namen durch ResultSet-Objekt oder ResultSetMetaData Object oder auf andere Weise zu erhalten.

Ich habe keine Möglichkeit gefunden, dies zu finden.

+1

Was ist los mit der Datenbank zu sehen, wie die Tabelle definiert wurde? Wenn mehrere eindeutige Schlüsseleinschränkungen vorhanden sind, kann einer für Benutzer "primär" sein, und ein Ersatzschlüssel ist in der Datenbank als primär definiert. Warum willst du das automatisieren? –

Antwort

9

Nein, Sie werden nicht, dass Informationen aus ResultSet oder ResultSetMetaData bekommen.

Was Sie dafür verwenden möchten, ist DatabaseMetadata Klasse. Von dieser Klasse überprüfen GetPrimaryKeys Methode, um die gewünschten Informationen zu erhalten.

Um dies zu verwenden, müssen Sie natürlich den Namen der Tabelle kennen.

+0

Was bedeutet "Katalog" und "Schema"? Bezieht sich "Schema" auf den Datenbanknamen? –

+0

@Yatendra, welche DB benutzen Sie? Diese sind in DB2 üblich. Wenn Sie Eclipse verwenden und eine Verbindung zur Ansicht "Datenbankentwicklung" herstellen, können Sie dies selbst herausfinden. – ericp

+0

@ericp, ich benutze Eclipse IDE und MySQL Datenbank. Aber ich möchte nicht, dass mein Code von einer bestimmten Datenbank abhängig ist. –

0

Ein nettes Werkzeug, mit dem Sie die Metadateninformationen verifizieren können, ist dbVisualizer.

Sie verwendet die JDBC-Metadaten zum Abrufen von Tabellendefinitionen und anderen Teilen der Datenbank. Schema und Katalog sind Spalten in der Tabellendefinitionsansicht - Sie können also prüfen, welche Werte in diesen Spalten für Ihre bevorzugte Datenbank enthalten sind.

dbVisualizer ist in einer kostenlosen Basisversion verfügbar.

3

Ich möchte hinzufügen, wenn in einer Tabelle Autoincrement Feld muss es der Primärschlüssel sein. So könnte Ihr Code wie folgt aussehen:

if(metaColumn.isAutoIncrement(i)) { 
    primaryKey = metaColumn.getColumnName(i); 
    i=nColoumn+1; 
} 

Es verwendet ResultSetMetaData.

+0

Dies würde fehlschlagen, wenn der Primärschlüssel keine Identität ist –

+0

Vielleicht ist meine Erfahrung auf MySQL beschränkt, aber in MySQL muss ein Autoinkrement ein Primärschlüssel sein. – swdev