sql >> Database >  >> RDS >> PostgreSQL

Krijg alle externe sleutels met JDBC

Ook al herhaalt je while-lus de hele ResultSet , retourneert de functie alleen de laatste kolom in een FK-beperking omdat u bij elke iteratie de waarde van de vorige iteratie overschrijft (fkTableData = rs.getString(i); ). Btw:`fkTableData zou eigenlijk een lokale variabele voor de methode moeten zijn, geen instantievariabele.

Uw functie zou een List<String> . moeten retourneren geen String .

Bovendien:u belt getImportedKeys() eenmaal voor elke kolom in de Resultatenset. Dat is buitengewoon inefficiënt. Als je Oracle zou gebruiken, zou je dat meteen merken omdat het ophalen van FK-informatie daar extreem traag is (Postgres is veel sneller bij het openen van de systeemcatalogi).

Als getImportedKeys() geeft één rij terug voor elke FK kolom u moet ook alle rijen verzamelen die tot één enkele beperkingsdefinitie behoren (d.w.z. voor één bovenliggende/onderliggende tabelcombinatie).

Het beste zou waarschijnlijk zijn om een ​​klasse PkDefinition . te definiëren waarin alle betrokken kolommen en de betrokken tabelnamen worden opgeslagen en uw functie List<PkDefinition> retourneert om meerdere oproepen voor dezelfde rij met resultatensets te voorkomen.




  1. MySQL-limiet van aflopende volgorde

  2. Wat is de opgeslagen procedure en waarom de opgeslagen procedure?

  3. MySQL die alle kolommen samenvoegt

  4. Android lijstweergave update/vernieuw gegevens zonder de app te sluiten