Wie lassen sich die Primärschlüssel einer MySQL-Tabelle auslesen?
In der MySQL-eigenen Datenbank information_schema
sind
die Metadaten der MySQL-Installation abgelegt. Die Klasse DatabaseMetaData
stellt diverse Methoden bereit, mit denen auf bequeme Art und Weise
häufig benötigte Angaben hieraus ermittelt werden
können.
Im Beispiel wird zunächst nach der
Initialisierung der Variablen mit den Verbindungsdaten eine
Verbindung zur Datenbank aufgebaut. Das Vorgehen hierbei wird im
Abschnitt Tabelle
auslesen näher erläutert.
Nach dem Erstellen
eines DatabaseMetaData-Objektes werden der erwähnten Methode getPrimaryKeys()
drei String-Parameter übergeben. Die ersten beiden, Katalog-
und Schema-Name, können null
oder ein Leerstring
("") sein. Werden Leerstrings übergeben, so werden die
PrimaryKeys ohne Katalog bzw. Schema ermittelt, wird null
übergeben, so werden Katalog und Schema nicht zur Ermittlung
hinzugezogen. Der dritte Parameter ist der Tabellenname.
Das
zurückgegebene ResultSet
enthält sechs Werte,
die durch Auslesen der einzelnen Positionen mit getString(int
index)
ermittelt werden können:
- 1 -> TABLE_CAT String => Tabellenkatalog (evtl.
null
) - 2 -> TABLE_SCHEM String => Tabellenschema (evtl.
null
) - 3 -> TABLE_NAME String => Tabellenname
- 4 -> COLUMN_NAME String => Feldname
- 5 -> KEY_SEQ short => Feld-Reihenfolge innerhalb des Primärschlüssels).
- 6 -> PK_NAME String => Name des Primärschlüssels
(evtl.
null
)
public class PrimaryKey {
static String user = "user";
static String pass = "password";
static String host = "localhost";
static String db = "Personal";
static String table = "Angestellte";
public static void main(String[] args) {
String url = "jdbc:mysql://" + host + "/" + db;
getKeys(url);
}
public static void getKeys(String url) {
try(Connection connection = DriverManager
.getConnection(url, user, pass)) {
Class.forName("com.mysql.cj.jdbc.Driver");
DatabaseMetaData dbmd = connection.getMetaData();
ResultSet rs = dbmd.getPrimaryKeys(null, null, table);
if (rs.next()) {
do {
System.out.println("Primary Key Name: " + rs.getString(6)
+ ", Primary Key Nummer: " + rs.getString(5)
+ ", Column: " + rs.getString(4));
}while(rs.next());
}else {
System.out.println("No keys found");
}
} catch (SQLException e) {
System.out.println("Fehler bei Tabellenabfrage: " + e);
return;
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.