Sterowniki


Wprowadzenie 

kwadrat   Sterownik JDBC (JDBC driver) jest zbiorem skompilowanych klas (bajtkod Javy), które implementują wszystkie interfejsy zawarte w java.sql oraz przedefiniowują (ponownie implementują) pozostające tam klasy. W większości przypadków (patrz: rodzaje sterowników) napisane są wyłącznie w Javie.
Implementacja bezpośrednio zależy od systemu zarządzania bazą danych, z którą będzie się łączyć aplikacja wykorzystująca sterownik. Stąd każdy sterownik JDBC służy do komunikacji z konkretną bazą danych i nie jest wykorzystywany w przypadku baz innych producentów.

Zastosowane rozwiązanie, choć podobne do technologii używanych w przypadku C++ lub innych języków, w przypadku Javy nabiera szerszego znaczenia. Ponieważ Java jest językiem w pełni przenośnym, producenci sterowników muszą przygotowywać tylko jeden pakiet dla każdej wersji standardu JDBC (za wyjątkiem sterowników 1. i 2. rodzaju). Tym samym, w odróżnieniu np. od wspomnianych interfejsów dla języka C++, z jednego binarium korzystamy w sytemie Linux i w Windows NT.

Producenci 

kwadrat   Sterowniki JDBC przygotowywane przez poszczególnych producentów są w większości przypadków powszechnie dostępne bez dodatkowych opłat. W pewnym sensie stanowią uzupełnienie pakietu JDBC. Można je pobrać bądź ze stron dostawców SZBD, bądź też z repozytorium Suna. Szczegóły w odnośnikach.
Nie wszystkie jednak są w pełni darmowe. Część spośród nich jest rozprowadzana komercyjnie.


kwadrat   Ponieważ nie wszyscy producenci systemów bazodanowych przygotowali javowe implementacje standardu JDBC, a niektórzy przygotowali rozwiązania hybrydowe, przyjęło się rozróżniać cztery zasadnicze typy sterowników JDBC:

  1. mosty JDBC-ODBC (JDBC-ODBC bridge) -
    korzystamy ze sterownika ODBC, z którym komunikuje się nasz most. Zapytania formułowane w Javie są tłumaczone na język sterownika ODBC. Wszelka komunikacja z bazą danych odbywa się poprzez sterownik ODBC. Takie rozwiązanie wiąże się z potencjalnymi opłatami za oprogramowanie ODBC.

  2. Java do API SZBD (Native-API partly-Java) -
    program w Javie komunikuje się z interfejsem SZBD, a nie jak poprzednio, ze sterownikiem ODBC.

  3. pośrednie JDBC (JDBC-Net pure Java) -
    sterownik JDBC komunikuje się z serwerem pośredniczącym, za pomocą protokołu niezależnego od SZBD. Serwer tłumaczy polecenia na protokól konkretnego SZBD i przesyła do niego otrzymane zapytania. Serwer może pośredniczyć w wymianie danych pomiędzy wieloma klientami i wieloma różnymi SZBD. Tym samym jest to najbardziej ogólne i heterogeniczne rozwiązanie, obciążone względami bezpieczeństwa.

  4. bezpośrednie JDBC (Native-protocol pure Java) -
    sterownik JDBC komunikuje się bezpośrednio z bazą danyhc przy pomocy jej protokołu sieciowego. Rozwiązanie najbardziej ogólne, z powodzeniem stosowane w sieciach wewnętrznych.

Poniższy rysunek obrazuje wspomniane rozwiązania ujęte w modelu warstwowym:

warstwy

Dwa pierwsze rozwiązania nie są sprzętowo niezależne, wymagają bowiem dostarczenia oprogramowania dedykowanego konkretnej platformie (sterownik ODBC (1) lub API bazy danych (2)). W tym dokumencie skupimy się na dwóch ostanich rozwiązaniach, traktując je łącznie.

Użycie 

kwadrat   Przed skorzystaniem z klas java.sql, należy pobrać odpowiedni pakiet zawierający dany sterownik JDBC, a nastęnie umieścić go (zgodnie z hierarchią katalogów zawartą w archiwum) w katalogu widocznym dla maszyny wirtualnej Javy (zmienna CLASSPATH). Po wykonaniu tych operacji sterownik JDBC jest gotów do pracy. Każda aplikacja może go dynamicznie załadować. Do tego celu służy polecenie:

Class.forName("pełna_nazwa_sterownika")

gdzie, w przypadku bazy Oracle, pełna_nazwa_sterownika, to oracle.jdbc.driver.OracleDriver.
Sterownik w pełni zgodny ze standardem JDBC (JDBC Compliant), powinien wtedy stworzyć także instancje klasy. Ponieważ nie wszystkie sterowniki spełniają ten wymóg, warto samodzielnie powołać do życia obiekt klasy:

Inną metodą na załadowanie sterownika jest ustalenie własności jdbc.drivers na nazwę ładowanej klasy:

Jeżeli operacja załadowania klas zakończyła się sukcesem (nie został podniesiony wyjątek z klasy SQLException), możemy rozpocząć łączenie z SZBD.



 powrót | początek | poprzedni | następny   Marek Misiowiec