sql >> Databáze >  >> RDS >> PostgreSQL

Získejte všechny cizí klíče pomocí JDBC

I když vaše smyčka while iteruje celou ResultSet , funkce vrátí pouze poslední sloupec v omezení FK, protože při každé iteraci přepíšete hodnotu předchozí iterace (fkTableData = rs.getString(i); ). Btw:`fkTableData by ve skutečnosti měla být lokální proměnná metody, nikoli proměnná instance.

Vaše funkce by měla vrátit List<String> není String .

Navíc:voláte getImportedKeys() jednou pro každý sloupec v sadě výsledků. To je extrémně neefektivní. Pokud byste používali Oracle, okamžitě byste si toho všimli, protože získávání informací FK je tam extrémně pomalé (Postgres je mnohem rychlejší při přístupu do systémových katalogů).

Jako getImportedKeys() vrátí jeden řádek pro každý sloupec FK musíte také shromáždit všechny řádky, které patří do jedné definice omezení (tj. pro jednu kombinaci rodičovské/podřízené tabulky).

Asi nejlepší by bylo definovat třídu PkDefinition který ukládá všechny zahrnuté sloupce a názvy tabulek a funkce vrací List<PkDefinition> abyste se vyhnuli vícenásobným voláním pro stejný řádek sady výsledků.




  1. MyISAM versus InnoDB

  2. Připravené prohlášení Chyba SQL

  3. Vylepšení dělení v PostgreSQL 11

  4. Chyba při instalaci psycopg2==2.6.2