Filtrowanie i sortowanie danych

Zapytania do bazy danych PostgreSQL w Javie

Miller Trujillo

Staff Software Engineer

Dlaczego filtrować i sortować?

  • Większość aplikacji nie wyświetla wszystkich rekordów
  • Wyniki należy zawężać
  • Dane warto organizować w sposób czytelny
  • Wyświetlać w zarządzalnych porcjach

$$

$$

$$

$$

  • WHERE, ORDER BY, LIMIT, OFFSET

Internetowa księgarnia

Zapytania do bazy danych PostgreSQL w Javie

Filtrowanie z WHERE

String sql = "SELECT * FROM books WHERE publication_year > ?";
PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, 2000); ResultSet rs = pstmt.executeQuery();
  • Użyj ? jako symbolu zastępczego i powiąż z setInt()
  • Kod Java pozostaje bez zmian – zmienia się tylko SQL
Zapytania do bazy danych PostgreSQL w Javie

Czy można filtrować w Javie?

  • Filtrowanie na poziomie bazy danych:
    • Zmniejsza ilość przesyłanych danych ✅
    • Zapobiega przeciążeniu sieci ✅
    • Poprawia wydajność ✅
  • Wyjątek: złożona logika (zewnętrzne API, modele AI) 💡

Analogia do zamawiania jedzenia

Zapytania do bazy danych PostgreSQL w Javie

Sortowanie z ORDER BY

String sql = "SELECT title, publication_year FROM books
WHERE category_id = ? ORDER BY publication_year DESC";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 3);
ResultSet rs = pstmt.executeQuery();
// Adding dynamic behavior
boolean desc = true;
String sql = "SELECT title, publication_year FROM books
WHERE category_id = ? ORDER BY publication_year ";

sql += desc ? "DESC" : "ASC";
  • += dołącza tekst do ciągu SQL
  • ?: – operator trójargumentowy (skrót if-else)
Zapytania do bazy danych PostgreSQL w Javie

Stronicowanie z LIMIT i OFFSET

  • LIMIT kontroluje liczbę zwracanych wierszy
  • OFFSET pomija wiersze przed zwróceniem wyników
  • ORDER BY zapewnia spójne wyniki między stronami
String sql = "SELECT title FROM books ORDER BY title ASC LIMIT ? OFFSET ?";
PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, 10); // LIMIT: 10 books per page pstmt.setInt(2, 20); // OFFSET: skip first 20 rows ResultSet rs = pstmt.executeQuery();
Zapytania do bazy danych PostgreSQL w Javie

Czas na ćwiczenia!

Zapytania do bazy danych PostgreSQL w Javie

Preparing Video For Download...