Även om din while-loop itererar över hela ResultSet
, kommer funktionen bara att returnera den sista kolumnen i en FK-begränsning eftersom du vid varje iteration skriver över värdet för den föregående iterationen (fkTableData = rs.getString(i);
). Btw:`fkTableData bör faktiskt vara en lokal variabel för metoden, inte en instansvariabel.
Din funktion bör returnera en List<String>
inte en String
.
Dessutom:du anropar getImportedKeys()
en gång för varje kolumn i resultatuppsättningen. Det är extremt ineffektivt. Om du använde Oracle skulle du märka det direkt eftersom hämtning av FK-information är extremt långsam där (Postgres är mycket snabbare när du kommer åt systemkatalogerna).
Som getImportedKeys()
returnerar en rad för varje FK kolumn du måste också samla alla rader som hör till en enda begränsningsdefinition (dvs. för en överordnad/underordnad tabellkombination).
Det bästa skulle förmodligen vara att definiera en klass PkDefinition
som lagrar alla inblandade kolumner och de inblandade tabellnamnen och har din funktion att returnera List<PkDefinition>
för att undvika flera anrop för samma resultatuppsättningsrad.