whileループがResultSet全体を繰り返しますが 、関数はFK制約の最後の列のみを返します。これは、反復ごとに前の反復の値を上書きするためです(fkTableData = rs.getString(i); )。ところで: `fkTableDataは、実際にはインスタンス変数ではなく、メソッドのローカル変数である必要があります。
関数はList<String>を返す必要があります Stringではありません 。
さらに、getImportedKeys()を呼び出しています 各列に1回 ResultSet内。それは非常に非効率的です。 Oracleを使用している場合、FK情報の取得が非常に遅いため、すぐに気付くでしょう(Postgresはシステムカタログにアクセスするときにはるかに高速です)。
getImportedKeys()として FK列ごとに1行を返します また、1つの制約定義に属するすべての行を収集する必要があります(つまり、1つの親/子テーブルの組み合わせに対して)。
おそらく最良の方法は、クラスPkDefinitionを定義することです。 関連するすべての列と関連するテーブル名を格納し、関数がList<PkDefinition>を返すようにします。 同じ結果セット行に対する複数の呼び出しを回避するため。