sql >> データベース >  >> RDS >> PostgreSQL

JDBCを使用してすべての外部キーを取得します

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




    1. PHP:変数を使用してテーブル名を保持し、その変数をクエリで使用する

    2. 重複する間隔の数をカウントするsql(oracle)

    3. このデータベースをクエリするためにselectステートメントを正しくするにはどうすればよいですか?

    4. MariaDBの「エラー1054(42S22):「on句」の不明な列「…」」を修正