sql >> Databasteknik >  >> RDS >> PostgreSQL

Få alla främmande nycklar med JDBC

Även om din while-loop itererar över hela ResultSet , kommer funktionen bara att returnera den sista kolumnen i en FK-begränsning eftersom du vid varje iteration skriver över värdet för den föregående iterationen (fkTableData = rs.getString(i); ). Btw:`fkTableData bör faktiskt vara en lokal variabel för metoden, inte en instansvariabel.

Din funktion bör returnera en List<String> inte en String .

Dessutom:du anropar getImportedKeys() en gång för varje kolumn i resultatuppsättningen. Det är extremt ineffektivt. Om du använde Oracle skulle du märka det direkt eftersom hämtning av FK-information är extremt långsam där (Postgres är mycket snabbare när du kommer åt systemkatalogerna).

Som getImportedKeys() returnerar en rad för varje FK kolumn du måste också samla alla rader som hör till en enda begränsningsdefinition (dvs. för en överordnad/underordnad tabellkombination).

Det bästa skulle förmodligen vara att definiera en klass PkDefinition som lagrar alla inblandade kolumner och de inblandade tabellnamnen och har din funktion att returnera List<PkDefinition> för att undvika flera anrop för samma resultatuppsättningsrad.




  1. Bygga Secure Public API med PHP/MYSQL

  2. Hur stoppar du MySQL på en Mac OS-installation?

  3. Kan inte hitta rubriken 'libpq-fe.h när du försöker installera pg gem

  4. När ska jag använda CROSS APPLY över INNER JOIN?