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>
を返すようにします。 同じ結果セット行に対する複数の呼び出しを回避するため。