Sobes.tech
Middle
170

Jak jest zbudowana klasa ResultSet w Java?

Odpowiedź od AI

sobes.tech AI

ResultSet jest interfejsem w pakiecie java.sql, reprezentującym wyniki wykonania zapytania SQL. Umożliwia dostęp do danych krok po kroku (wiersz po wierszu).

Kluczowe aspekty:

  • Kursor: ResultSet obsługuje kursor wskazujący na bieżący wiersz danych. Początkowo kursor znajduje się przed pierwszym wierszem.
  • Nawigacja: Do przemieszczania kursora służą metody takie jak next(), previous(), first(), last(). next() zwraca true, jeśli kursor pomyślnie przesunął się do następnego wiersza, a false, jeśli osiągnięto koniec wyników.
  • Typy: Istnieją różne typy ResultSet z różnymi możliwościami nawigacji i aktualizacji danych:
    • TYPE_FORWARD_ONLY: Kursor porusza się tylko do przodu (najwydajniejszy).
    • TYPE_SCROLL_INSENSITIVE: Kursor może się poruszać w dowolnym kierunku, zmiany w bazie danych nie są odzwierciedlane.
    • TYPE_SCROLL_SENSITIVE: Kursor może się poruszać w dowolnym kierunku, zmiany w bazie danych są odzwierciedlane (może być wolniejsze).
  • Konkurencja: Określa, czy można modyfikować dane przez ResultSet:
    • CONCUR_READ_ONLY: Tylko do odczytu.
    • CONCUR_UPDATABLE: Odczyt i zapis.
  • Pobieranie danych: Dane z bieżącego wiersza są pobierane za pomocą metod get<Type>(), np. getString(int columnIndex), getInt(String columnLabel), getDate(int columnIndex).
  • Zamykanie: Ważne jest zamknięcie ResultSet po użyciu, aby zwolnić zasoby, używając metody close(). Zazwyczaj robi się to w bloku finally lub z użyciem try-with-resources.

Przykład użycia:

// Zakłada się, że connection i statement są już zainicjalizowane
try (ResultSet resultSet = statement.executeQuery("SELECT id, name FROM users")) {
    while (resultSet.next()) {
        int id = resultSet.getInt("id");
        String name = resultSet.getString("name");
        System.out.println("ID użytkownika: " + id + ", Imię: " + name);
    }
} catch (SQLException e) {
    e.printStackTrace();
}

ResultSet nie przechowuje wszystkich danych w pamięci jednocześnie, co czyni go wydajnym przy pracy z dużymi ilościami danych.