sql >> Base de Datos >  >> RDS >> PostgreSQL

Obtenga todas las claves foráneas usando JDBC

A pesar de que su ciclo while itera sobre todo el ResultSet , la función solo devolverá la última columna en una restricción FK porque en cada iteración sobrescribe el valor de la iteración anterior (fkTableData = rs.getString(i); ). Por cierto:`fkTableData en realidad debería ser una variable local para el método, no una variable de instancia.

Tu función debería devolver una List<String> no es una String .

Además:está llamando a getImportedKeys() una vez por cada columna en el conjunto de resultados. Eso es extremadamente ineficiente. Si estuviera utilizando Oracle, lo notaría de inmediato porque la recuperación de información de FK es extremadamente lenta allí (Postgres es mucho más rápido al acceder a los catálogos del sistema).

Como getImportedKeys() devuelve una fila para cada columna de FK también debe recopilar todas las filas que pertenecen a una sola definición de restricción (es decir, para una combinación de tabla principal/secundaria).

Probablemente lo mejor sería definir una clase PkDefinition que almacena todas las columnas involucradas y los nombres de las tablas involucradas y hace que su función devuelva List<PkDefinition> para evitar varias llamadas para la misma fila del conjunto de resultados.