PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Obtenha todas as chaves estrangeiras usando JDBC


Mesmo que seu loop while itere em todo o ResultSet , a função retornará apenas a última coluna em uma restrição FK porque em cada iteração você substitui o valor da iteração anterior (fkTableData = rs.getString(i); ). Btw:`fkTableData deve ser na verdade uma variável local para o método, não uma variável de instância.

Sua função deve retornar um List<String> não uma String .

Além disso:você está chamando getImportedKeys() uma vez para cada coluna no ResultSet. Isso é extremamente ineficiente. Se você estivesse usando o Oracle, perceberia isso imediatamente porque a recuperação das informações do FK é extremamente lenta (o Postgres é muito mais rápido ao acessar os catálogos do sistema).

Como getImportedKeys() retorna uma linha para cada coluna FK você também precisa coletar todas as linhas que pertencem a uma única definição de restrição (ou seja, para uma combinação de tabela pai/filho).

Provavelmente a melhor coisa seria definir uma classe PkDefinition que armazena todas as colunas envolvidas e os nomes das tabelas envolvidas e faz com que sua função retorne List<PkDefinition> para evitar várias chamadas para a mesma linha do conjunto de resultados.