JDBC - zestawy wyników

Instrukcje SQL, które odczytują dane z zapytania do bazy danych, zwracają dane w zestawie wyników. Instrukcja SELECT to standardowy sposób wybierania wierszy z bazy danych i przeglądania ich w zestawie wyników. Java.sql.ResultSet interfejs reprezentuje zestaw wyników kwerendy bazy danych.

Obiekt ResultSet utrzymuje kursor wskazujący na bieżący wiersz w zestawie wyników. Termin „zestaw wyników” odnosi się do danych wierszy i kolumn zawartych w obiekcie ResultSet.

Metody interfejsu ResultSet można podzielić na trzy kategorie -

  • Navigational methods: Służy do przesuwania kursora.

  • Get methods: Służy do przeglądania danych w kolumnach bieżącego wiersza wskazywanego przez kursor.

  • Update methods:Służy do aktualizowania danych w kolumnach bieżącego wiersza. Aktualizacje można następnie zaktualizować również w podstawowej bazie danych.

Kursor można przesuwać w oparciu o właściwości zestawu wyników. Te właściwości są wyznaczane podczas tworzenia odpowiedniej instrukcji, która generuje zestaw wyników.

JDBC udostępnia następujące metody połączenia w celu tworzenia instrukcji z żądanym zestawem wyników -

  • createStatement(int RSType, int RSConcurrency);

  • prepareStatement(String SQL, int RSType, int RSConcurrency);

  • prepareCall(String sql, int RSType, int RSConcurrency);

Pierwszy argument wskazuje typ obiektu ResultSet, a drugi argument jest jedną z dwóch stałych ResultSet do określenia, czy zestaw wyników jest tylko do odczytu, czy można go aktualizować.

Typ zestawu wyników

Możliwe typy RST podano poniżej. Jeśli nie określisz żadnego typu zestawu wyników, automatycznie otrzymasz typ TYPE_FORWARD_ONLY.

Rodzaj Opis
ResultSet.TYPE_FORWARD_ONLY Kursor może poruszać się tylko do przodu w zestawie wyników.
ResultSet.TYPE_SCROLL_INSENSITIVE Kursor można przewijać do przodu i do tyłu, a zestaw wyników nie jest wrażliwy na zmiany wprowadzone przez innych w bazie danych, które mają miejsce po utworzeniu zestawu wyników.
ResultSet.TYPE_SCROLL_SENSITIVE. Kursor można przewijać do przodu i do tyłu, a zestaw wyników jest wrażliwy na zmiany wprowadzone przez innych w bazie danych, które mają miejsce po utworzeniu zestawu wyników.

Współbieżność zestawu wyników

Możliwe RSConcurrency podano poniżej. Jeśli nie określisz żadnego typu współbieżności, automatycznie otrzymasz taki, który jest CONCUR_READ_ONLY.

Konkurencja Opis
Zestaw wyników.CONCUR_READ_ONLY Tworzy zestaw wyników tylko do odczytu. To jest ustawienie domyślne
ResultSet.CONCUR_UPDATABLE Tworzy aktualizowalny zestaw wyników.

Wszystkie nasze przykłady napisane do tej pory można zapisać w następujący sposób, co inicjuje obiekt Statement w celu utworzenia obiektu ResultSet tylko do przodu i tylko do odczytu -

try {
   Statement stmt = conn.createStatement(
                           ResultSet.TYPE_FORWARD_ONLY,
                           ResultSet.CONCUR_READ_ONLY);
}
catch(Exception ex) {
   ....
}
finally {
   ....
}

Poruszanie się po zestawie wyników

W interfejsie ResultSet istnieje kilka metod, które wymagają przesuwania kursora, w tym -

SN Metody i opis
1 public void beforeFirst() throws SQLException

Przesuwa kursor tuż przed pierwszym wierszem.

2 public void afterLast() throws SQLException

Przesuwa kursor tuż za ostatnim wierszem.

3 public boolean first() throws SQLException

Przenosi kursor do pierwszego wiersza.

4 public void last() throws SQLException

Przenosi kursor do ostatniego wiersza.

5 public boolean absolute(int row) throws SQLException

Przenosi kursor do określonego wiersza.

6 public boolean relative(int row) throws SQLException

Przesuwa kursor o określoną liczbę wierszy do przodu lub do tyłu, z miejsca, w którym aktualnie wskazuje.

7 public boolean previous() throws SQLException

Przenosi kursor do poprzedniego wiersza. Ta metoda zwraca wartość false, jeśli poprzedni wiersz jest poza zestawem wyników.

8 public boolean next() throws SQLException

Przenosi kursor do następnego wiersza. Ta metoda zwraca wartość false, jeśli w zestawie wyników nie ma więcej wierszy.

9 public int getRow() throws SQLException

Zwraca numer wiersza, na który wskazuje kursor.

10 public void moveToInsertRow() throws SQLException

Przenosi kursor do specjalnego wiersza w zestawie wyników, którego można użyć do wstawienia nowego wiersza do bazy danych. Bieżąca lokalizacja kursora jest zapamiętywana.

11 public void moveToCurrentRow() throws SQLException

Przenosi kursor z powrotem do bieżącego wiersza, jeśli jest aktualnie w wierszu wstawiania; w przeciwnym razie ta metoda nic nie robi

Aby lepiej zrozumieć, przeanalizujmy Nawigację - przykładowy kod .

Przeglądanie zestawu wyników

Interfejs ResultSet zawiera dziesiątki metod uzyskiwania danych z bieżącego wiersza.

Istnieje metoda get dla każdego z możliwych typów danych, a każda metoda get ma dwie wersje -

  • Taki, który przyjmuje nazwę kolumny.

  • Taki, który przyjmuje indeks kolumn.

Na przykład, jeśli kolumna, którą chcesz wyświetlić, zawiera int, musisz użyć jednej z metod getInt () elementu ResultSet -

SN Metody i opis
1 public int getInt(String columnName) throws SQLException

Zwraca wartość int w bieżącym wierszu w kolumnie o nazwie columnName.

2 public int getInt(int columnIndex) throws SQLException

Zwraca liczbę int w bieżącym wierszu w określonym indeksie kolumny. Indeks kolumn zaczyna się od 1, co oznacza, że ​​pierwsza kolumna wiersza to 1, druga kolumna wiersza to 2 i tak dalej.

Podobnie, w interfejsie ResultSet znajdują się metody get dla każdego z ośmiu typów pierwotnych języka Java, a także typowe typy, takie jak java.lang.String, java.lang.Object i java.net.URL.

Istnieją również metody pobierania typów danych SQL java.sql.Date, java.sql.Time, java.sql.TimeStamp, java.sql.Clob i java.sql.Blob. Zapoznaj się z dokumentacją, aby uzyskać więcej informacji na temat korzystania z tych typów danych SQL.

Aby lepiej zrozumieć, przeanalizujmy Wyświetlanie - przykładowy kod .

Aktualizacja zestawu wyników

Interfejs ResultSet zawiera kolekcję metod aktualizacji służących do aktualizowania danych zestawu wyników.

Podobnie jak w przypadku metod get, istnieją dwie metody aktualizacji dla każdego typu danych -

  • Taki, który przyjmuje nazwę kolumny.

  • Taki, który przyjmuje indeks kolumn.

Na przykład, aby zaktualizować kolumnę typu String w bieżącym wierszu zestawu wyników, należy użyć jednej z następujących metod updateString () -

SN Metody i opis
1 public void updateString(int columnIndex, String s) throws SQLException

Zmienia ciąg w określonej kolumnie na wartość s.

2 public void updateString(String columnName, String s) throws SQLException

Podobnie jak w przypadku poprzedniej metody, z tą różnicą, że kolumna jest określana za pomocą nazwy zamiast indeksu.

W pakiecie java.sql istnieją metody aktualizacji ośmiu pierwotnych typów danych, a także typów danych typu String, Object, URL i SQL.

Zaktualizowanie wiersza w zestawie wyników zmienia kolumny bieżącego wiersza w obiekcie ResultSet, ale nie w bazowej bazie danych. Aby zaktualizować zmiany w wierszu w bazie danych, musisz wywołać jedną z następujących metod.

SN Metody i opis
1 public void updateRow()

Aktualizuje bieżący wiersz, aktualizując odpowiedni wiersz w bazie danych.

2 public void deleteRow()

Usuwa bieżący wiersz z bazy danych

3 public void refreshRow()

Odświeża dane w zestawie wyników, aby odzwierciedlić wszelkie ostatnie zmiany w bazie danych.

4 public void cancelRowUpdates()

Anuluje wszelkie aktualizacje wprowadzone w bieżącym wierszu.

5 public void insertRow()

Wstawia wiersz do bazy danych. Tę metodę można wywołać tylko wtedy, gdy kursor wskazuje wiersz wstawiania.

Aby lepiej zrozumieć, przyjrzyjmy się aktualizacji - przykładowy kod .