PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Ottieni tutte le chiavi esterne usando JDBC

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.