Применение фильтров к JTable, заполненной базой данных

#java #sql #postgresql #performance

#java #sql #postgresql #Производительность

Вопрос:

У меня есть приложение на Java, которое показывает содержимое одной таблицы в PostgreSQL, предположим, что это таблица фильмов. Содержимое этой таблицы запрашивается в ArrayList, а элементы списка отображаются в JTable. Я хочу применить некоторые фильтры к этому каталогу фильмов, чтобы в моей таблице отображались только элементы, удовлетворяющие критериям фильтрации. Это простые фильтры, похожие на:

  • Названия фильмов, которые содержат заданную подстроку
  • Фильмы, снятые выбранным режиссером
  • Фильмы, выпущенные после / до указанного года
  • Фильмы, у которых больше, чем заданный рейтинг IMDB

В принципе, все фильтры могут быть применены с помощью простых запросов SQL. Насколько я могу видеть, у меня здесь есть два варианта:

  1. Запросите все фильмы в списке, а затем программно примените фильтр. В этом случае данные будут запрашиваться только в начале (при условии, что в базе данных нет изменений), но это потребляет слишком много памяти.
  2. Каждый раз, когда применяется фильтр, создавайте новый SQL-запрос и сохраняйте в списке только те фильмы, которые удовлетворяют заданным критериям фильтрации. Для этого требуется меньше места для хранения, но он создает новый запрос каждый раз, когда применяется фильтр.

Я хотел бы знать, какая из этих методологий является лучшим вариантом, и была бы ситуация иной, если бы были обновления в базе данных фильмов (которые есть). Если есть другой вариант, я также хотел бы знать. Заранее спасибо.

Комментарии:

1. Возможно, какая из этих методологий является лучшим вариантом , может быть самоуверенным вопросом, который не относится к теме StackOverflow. Я бы выбрал # 2. Java SQL API быстры в запуске, поэтому количество вызовов запросов не облагается налогом.

2. Опубликуйте свое фактическое определение таблицы, некоторые образцы данных — в виде текста, без изображений , и ожидаемый результат. Может оказаться возможным обобщить один запрос для варианта 2.