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.