PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Holen Sie sich alle Fremdschlüssel mit JDBC

Auch wenn Ihre While-Schleife über das gesamte ResultSet iteriert , gibt die Funktion nur die letzte Spalte in einer FK-Einschränkung zurück, da Sie bei jeder Iteration den Wert der vorherigen Iteration überschreiben (fkTableData = rs.getString(i); ). Übrigens:`fkTableData sollte eigentlich eine lokale Variable für die Methode sein, keine Instanzvariable.

Ihre Funktion sollte eine List<String> zurückgeben kein String .

Zusätzlich:Sie rufen getImportedKeys() auf einmal für jede Spalte im Ergebnissatz. Das ist extrem ineffizient. Wenn Sie Oracle verwenden, würden Sie das sofort bemerken, weil das Abrufen von FK-Informationen dort extrem langsam ist (Postgres ist beim Zugriff auf die Systemkataloge viel schneller).

Als getImportedKeys() gibt eine Zeile für jede FK Spalte zurück Sie müssen auch alle Zeilen sammeln, die zu einer einzigen Einschränkungsdefinition gehören (d. h. für eine Kombination aus übergeordneten und untergeordneten Tabellen).

Am besten wäre es wahrscheinlich, eine Klasse PkDefinition zu definieren die alle beteiligten Spalten und die beteiligten Tabellennamen speichert und Ihre Funktion List<PkDefinition> zurückgibt um mehrere Aufrufe für dieselbe Ergebnissatzzeile zu vermeiden.