Ook al herhaalt je while-lus de hele ResultSet
, retourneert de functie alleen de laatste kolom in een FK-beperking omdat u bij elke iteratie de waarde van de vorige iteratie overschrijft (fkTableData = rs.getString(i);
). Btw:`fkTableData zou eigenlijk een lokale variabele voor de methode moeten zijn, geen instantievariabele.
Uw functie zou een List<String>
. moeten retourneren geen String
.
Bovendien:u belt getImportedKeys()
eenmaal voor elke kolom in de Resultatenset. Dat is buitengewoon inefficiënt. Als je Oracle zou gebruiken, zou je dat meteen merken omdat het ophalen van FK-informatie daar extreem traag is (Postgres is veel sneller bij het openen van de systeemcatalogi).
Als getImportedKeys()
geeft één rij terug voor elke FK kolom u moet ook alle rijen verzamelen die tot één enkele beperkingsdefinitie behoren (d.w.z. voor één bovenliggende/onderliggende tabelcombinatie).
Het beste zou waarschijnlijk zijn om een klasse PkDefinition
. te definiëren waarin alle betrokken kolommen en de betrokken tabelnamen worden opgeslagen en uw functie List<PkDefinition>
retourneert om meerdere oproepen voor dezelfde rij met resultatensets te voorkomen.