Rozdział 9

Interfejs Java JDBC do PostgreSQL

9.1  Przygotowania

Archiwum postgresql.jar musi być dostępne ze ścieżki klas. Domyślnie znajduje się ono w /usr/local/pgsql/share/java, czyli można na przykład użyć

export CLASSPATH=$CLASSPATH:/usr/local/pgsql/share/java/postgresql.jar

Program postmaster musi być wystartowany z opcją -i.

9.2  Programowanie

Program powinien zawierać

import java.sql.*;

Nie należy importować pakietu org.postgresql!

Przed połączeniem się z bazą danych należy załadować sterownik. Można to zrobić dwoma sposobami.

Prostszy to użyć następującego wywołania

Class.forName("org.postgresql.Driver");

Uwaga: należy przechwycić wyjątek ClassNotFoundException. Oznacza on, że sterownik nie jest dostępny.

Powyższy sposób ogranicza nasz program do baz danych Postgresa. Zamiast niego można podać sterownik podczas wywołania Javy

java -Djdbc.drivers=postgresql.Driver mój-program

Teraz zmiana bazy danych często wymaga wyłacznie zmiany opcji w wywołaniu Javy.

Bazy danych identyfikuje się adresami URL

jdbc:postgresql//komputer:port/baza-danych
Wymagane jest jedynie podanie bazy danych, domyślnie i port domyślnie przyjmują wartości localhost i 5432.

Łączymy się z baza danych tworząc obiekt Connection

Connection bd = DriverManager.getConnection(url, user, password);

Otrzymanie wyjątku SQLException z komunikatem No driver available może oznaczać błędną ścieżkę do klas.

Połączenie zamykamy wołając

bd.clos();

9.2.1  Wykonywanie zapytań

Musimy najpierw utworzyć obiekt Statement

Statement stmt = db.createStatement();

Możemy go teraz użyć wielokrotnie do zadawania kolejnych zapytań

ResultSet result = stmt.executeQuery("SELECT * FROM Gatunki");
while (result.next()) 
  System.out.println(result.getString(1));

result.close()

Trzeba jednak pamiętać, że dla obiektu Statement może istnieć tylko jeden zbiór wyników (każdy kolejny zamazuje poprzedni).

Przed pobraniem wyniku ze zbioru wyników należy wywołać metodę next(). Zwraca ona prawdę jeśli istnieje kolejny wiersz i równocześnie czyni go bieżącym.

Zgodnie ze specyfikację JDBC, zawartość pola można odczytać tylko raz, choć obecny sterownik Postgresa pozwala na wielokrotny dostęp.

Polecenia modyfikacji wykonuje się pisząc

stmt.executeUpdate("UPDATE Zwierz SET wiek = wiek + 1");
while (result.next()) 
  System.out.println(result.getString(1));

result.close()