Même si votre boucle while itère sur l'ensemble du ResultSet
, la fonction ne renverra que la dernière colonne d'une contrainte FK car à chaque itération vous écrasez la valeur de l'itération précédente (fkTableData = rs.getString(i);
). Btw :`fkTableData devrait en fait être une variable locale à la méthode, pas une variable d'instance.
Votre fonction doit renvoyer un List<String>
pas une String
.
De plus :vous appelez getImportedKeys()
une fois pour chaque colonne dans le jeu de résultats. C'est extrêmement inefficace. Si vous utilisiez Oracle, vous le remarqueriez immédiatement car la récupération des informations FK y est extrêmement lente (Postgres est beaucoup plus rapide lors de l'accès aux catalogues système).
Comme getImportedKeys()
renvoie une ligne pour chaque FK colonne vous devez également collecter toutes les lignes qui appartiennent à une seule définition de contrainte (c'est-à-dire pour une combinaison de table parent/enfant).
Le mieux serait probablement de définir une classe PkDefinition
qui stocke toutes les colonnes impliquées et les noms de table impliqués et que votre fonction renvoie List<PkDefinition>
pour éviter plusieurs appels pour la même ligne d'ensemble de résultats.