Anche se il tuo ciclo while scorre sull'intero ResultSet
, la funzione restituirà solo l'ultima colonna in un vincolo FK perché ad ogni iterazione si sovrascrive il valore dell'iterazione precedente (fkTableData = rs.getString(i);
). A proposito:`fkTableData dovrebbe effettivamente essere una variabile locale del metodo, non una variabile di istanza.
La tua funzione dovrebbe restituire un List<String>
non una String
.
Inoltre:stai chiamando getImportedKeys()
una volta per ogni colonna nel set di risultati. Questo è estremamente inefficiente. Se stavi utilizzando Oracle, lo noterai immediatamente perché il recupero delle informazioni FK è estremamente lento lì (Postgres è molto più veloce quando si accede ai cataloghi di sistema).
Come getImportedKeys()
restituisce una riga per ogni colonna FK è inoltre necessario raccogliere tutte le righe che appartengono a una singola definizione di vincolo (ad esempio per una combinazione di tabella padre/figlio).
Probabilmente la cosa migliore sarebbe definire una classe PkDefinition
che memorizza tutte le colonne coinvolte e i nomi delle tabelle coinvolti e la tua funzione restituisce List<PkDefinition>
per evitare più chiamate per la stessa riga del set di risultati.