Nawet jeśli pętla while iteruje po całym ResultSet
, funkcja zwróci tylko ostatnią kolumnę w ograniczeniu FK, ponieważ w każdej iteracji nadpisujesz wartość poprzedniej iteracji (fkTableData = rs.getString(i);
). Btw:`fkTableData powinna właściwie być zmienną lokalną metody, a nie zmienną instancji.
Twoja funkcja powinna zwrócić List<String>
nie String
.
Dodatkowo:wywołujesz getImportedKeys()
raz na każdą kolumnę w zestawie wyników. To jest wyjątkowo nieefektywne. Gdybyś używał Oracle, zauważyłbyś to natychmiast, ponieważ pobieranie informacji FK jest tam bardzo wolne (Postgres jest znacznie szybszy podczas uzyskiwania dostępu do katalogów systemowych).
Jako getImportedKeys()
zwraca jeden wiersz dla każdej kolumny FK musisz również zebrać wszystkie wiersze należące do jednej definicji ograniczenia (tj. dla jednej kombinacji tabeli nadrzędnej/podrzędnej).
Prawdopodobnie najlepiej byłoby zdefiniować klasę PkDefinition
który przechowuje wszystkie zaangażowane kolumny i nazwy tabel, których to dotyczy, a funkcja zwraca List<PkDefinition>
aby uniknąć wielu wywołań dla tego samego wiersza zestawu wyników.