PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Вземете всички външни ключове с помощта на JDBC

Въпреки че вашият цикъл while обхожда целия ResultSet , функцията ще върне само последната колона във FK ограничение, защото при всяка итерация презаписвате стойността на предишната итерация (fkTableData = rs.getString(i); ). Между другото:`fkTableData всъщност трябва да бъде локална променлива за метода, а не променлива на екземпляр.

Вашата функция трябва да върне List<String> не е String .

Освен това:вие извиквате getImportedKeys() веднъж за всяка колона в ResultSet. Това е изключително неефективно. Ако сте използвали Oracle, ще забележите това незабавно, тъй като там извличането на FK информация е изключително бавно (Postgres е много по-бърз при достъп до системните каталози).

Като getImportedKeys() връща един ред за всяка FK колона вие също трябва да съберете всички редове, които принадлежат към една единствена дефиниция на ограничение (т.е. за една комбинация от таблица родител/дете).

Вероятно най-доброто нещо би било да се дефинира клас PkDefinition който съхранява всички включени колони и имената на включените таблици и вашата функция връща List<PkDefinition> за да избегнете множество извиквания за един и същ ред с набор от резултати.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо PostgreSQL не връща нулеви стойности, когато условието е <> вярно

  2. Промяна на типа колона на по-дълги низове в релси

  3. Име на XML елемент от данни в Postgres

  4. JPA и JSON операторска собствена заявка

  5. объркване на postgresql порт 5433 или 5432?