JDBC

advertisement
JDBC
Technologia JDBC jest zaawansowanym środowiskiem programistycznym, które zapewnia
dostęp do różnych źródeł danych w tym baz danych SQL wielu producentów. Sterowniki
JDBC pozwalają łączyć się z dostawcami danych w środowiskach heterogenicznych.
JDBC API jest przemysłowym standardem dostępowym nie zależącym od dostawców
silników bazodanowych zapewniającym łączność między programami tworzonymi w języku
programowania Java i tymi systemami bazodanowymi.
Czym jest SQL:
SQL (ang. Structured Query Language) to strukturalny język zapytań używany do tworzenia,
modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych.
Język SQL jest językiem deklaratywnym. Decyzję o sposobie przechowywania i pobrania
danych pozostawia się systemowi zarządzania bazą danych DBMS.
Jest to język programowania opracowany w latach siedemdziesiątych w firmie IBM. Stał się
on standardem w komunikacji z serwerami relacyjnych baz danych. Wiele współczesnych
systemów relacyjnych baz danych używa do komunikacji z użytkownikiem SQL, dlatego
mówi się, że korzystanie z relacyjnych baz danych, to korzystanie z SQL-a. Pierwszą firmą,
która włączyła SQL do swojego produktu komercyjnego, był Oracle. Dalsze wprowadzanie
SQL-a, w produktach innych firm, wiązało się nierozłącznie z wprowadzaniem modyfikacji
pierwotnego języka. Wkrótce utrzymanie dalszej jednolitości języka wymagało
wprowadzenia standardu.
Funkcje silnika i middleware
Produkty związane z relacyjnymi bazami danych to nie tylko serwery. Sam serwer określa się
często takimi nazwami jak "back end", "engine", czy też "motor/silnik bazy danych".
Przechowuje on dane oraz zapewnia ich pobieranie i aktualizacje w odpowiedzi na pobierane
instrukcje w SQL-u.
Uzupełnieniem serwera jest zazwyczaj "front end", "middleware" czy też "fronton" narzędzia upraszczające komunikację z serwerem i wyposażone w mechanizmy pozwalające
wykorzystać pobrane dane. Należą do nich mechanizmy generowania i obsługi formularzy
oraz raportów, języki czwartej generacji (4GL), graficzne języki zapytań, narzędzia
konstrukcyjne użytkownika, oprogramowanie do prezentacji multimedialnych, systemy
tworzenia hipertekstu, systemy CAD/CAM, arkusze kalkulacyjne, jak również interfejsy
dostępu bezpośredniego. Wszystkie one wykorzystują, do komunikacji z serwerem i
wykonywania za jego pośrednictwem różnych operacji, język SQL. Serwer odpowiada za
przechowywanie, porządkowanie i pobieranie danych, zapewnia ich integralność,
bezpieczeństwo oraz zabezpiecza przed ewentualnymi konfliktami między użytkownikami.
Formy SQL-a
Z technicznego punktu widzenia, SQL jest podjęzykiem danych. Oznacza to, że jest on
wykorzystywany wyłącznie do komunikacji z bazą danych. Nie posiada on cech
pozwalających na tworzenie kompletnych programów. Jego wykorzystanie może być trojakie
i z tego względu wyróżnia się trzy formy SQL-a:
1. SQL interakcyjny lub autonomiczny wykorzystywany jest przez użytkowników w
celu bezpośredniego pobierania lub wprowadzania informacji do bazy. Przykładem
może być zapytanie prowadzące do uzyskania zestawienia aktywności kont w
miesiącu. Wynik jest wówczas przekazywany na ekran, z ewentualną opcją jego
przekierowania do pliku lub drukarki.
2. Statyczny kod SQL (Static SQL) nie ulega zmianom i pisany jest wraz z całą
aplikacją, podczas której pracy jest wykorzystywany. Nie ulega zmianom w sensie
zachowania niezmiennej treści instrukcji, które jednak zawierać mogą odwołania do
zmiennych lub parametrów przekazujących wartości z lub do aplikacji. Statyczny SQL
występuje w dwóch odmianach.
1. Embedded SQL (Osadzony SQL) oznacza włączenie kodu SQL do kodu
źródłowego innego języka. Większość aplikacji pisana jest w takich językach
jak C++ czy Java, jedynie odwołania do bazy danych realizowane są w SQL.
W tej odmianie statycznego SQL-a do przenoszenia wartości wykorzystywane
są zmienne.
2. Język modułów. W tym podejściu moduły SQL łączone są z modułami kodu
w innym języku. Moduły kodu SQL przenoszą wartości do i z parametrów,
podobnie jak to się dzieje przy wywoływaniu podprogramów w większości
języków proceduralnych. Jest to pierwotne podejście, zaproponowane w
standardzie SQL. Embedded SQL został do oficjalnej specyfikacji włączony
nieco później.
3. Dynamiczny kod SQL (Dynamic SQL) generowany jest w trakcie pracy aplikacji.
Wykorzystuje się go w miejsce podejścia statycznego, jeżeli w chwili pisania aplikacji
nie jest możliwe określenie treści potrzebnych zapytań - powstaje ona w oparciu o
decyzje użytkownika. Tę formę SQL generują przede wszystkim takie narzędzia jak
graficzne języki zapytań. Utworzenie odpowiedniego zapytania jest tu odpowiedzią na
działania użytkownika.
Wymagania tych trzech form różnią się i znajduje to odbicie w wykorzystywanych przez nie
konstrukcjach językowych. Zarówno statyczny, jak i dynamiczny SQL uzupełniają formę
autonomiczną cechami odpowiednimi tylko w określonych sytuacjach. Większość języka
pozostaje jednak dla wszystkich form identyczna.
Możliwości JDBC API:



Nawiązanie połączenia z bazą danych lub innym tabelarycznym źródłem danych.
Wysyłać i wykonywać polecenia SQL
Przetwarzać dane będące wynikiem wykonywanych poleceń.
Architektura JDBC
JDBC zawiera dwa główne zestawy interfejsów:
1. JDBC API dla programistów aplikacji
2. JDBC niższego poziomu dla programistów sterowników dostępu do baz danych
Sterowniki JDBC można podzielić na 4 kategorie. Aplikacje i aplety Java mogą sięgać
do baz danych używając bezpośrednio sterowników Java JDBC lub pośrednio poprzez
sterowniki ODBC (OpenDataBaseConnectivity). Schematy zasady działania pokazano
poniżej.
Lewa Strona, Typ 4: Bezpośredni dostęp do bazy danych przez sterowniki Java
Ten sposób zamienienia wywołania JDBC na protokół używany bezpośredni ooprzez
dostarczyciela bazy danych.
Prawa strona, Typ 3: Dostęp do bazy danych przez sterowniki Java za pośrednictwem
warstwy pośredniej.
Ten sposób tłumaczy wywołania JDBC na protokół pośredni, który potem z kolei jets
tłumaczony na protokół dostawcy bazy danych. Warstwa pośrednia pozwala łączyć się z
różnymi silnikami baz danych.
Rysunek poniżej przedstawia połączenie JDBC używające sterowniki ODBC oraz istniejącą
bibliotekę dostępową.
Lewa strona, Typ 1: Most JDBC-ODBC w połączeniu ze sterownikami ODBC
Ta kombinacja pozwala JDBC na dostęp do źródła danych poprzez ładownie
prekompilowanych sterowników na wszystkich maszynach klienckich ODBC.
Firma Sun dostarcza sterownik-most JDBC-ODBC, który jest eksperymentalnie używany i w
tedy kiedy inne rozwiązania zawodzą.
Prawa strona, Typ 2: Funkcje natywne interfejsu sterowników.
Ten typ sterowników zamienia wywołania JDBC na funkcje interfejsu dostępu do systemów
bazodanowych dla producentów: Oracle, Sybase, Informix, DB2 i innych. To rozwiązanie
wymaga ładowania na maszynach klienckich binarnych bibliotek.
Linki:
http://java.sun.com/products/jdbc/
http://java.sun.com/products/jdbc/overview.html
http://java.sun.com/j2se/1.4.2/docs/guide/jdbc/getstart/GettingStartedTOC.fm.html
http://pl.wikipedia.org/wiki/SQL
Przykład
Ten prosty przykład pozwoli poznać jak:


Podłączanie się do źródła danych ODBC. Źródło danych ODBC to baza danych
zarejestrowana przez sterownik ODBC.
Selektywne wyciąganie danych za pomocą języka SQL.
Zakładamy, że w sterownikach ODBC mamy zdefiniowane źródło danych o nazwie CafeJolt
oraz w bazie tej jest tabela JoltData (o kolumnach programmer, day, cups, variety )
import java.sql.*;
public class JoltReport {
public static void main (String args[]) {
String URL = "jdbc:odbc:CafeJolt";
String username = "";
String password = "";
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} catch (Exception e) {
System.out.println("Failed to load JDBC/ODBC driver.");
return;
}
Statement stmt = null;
Connection con=null;
try {
con = DriverManager.getConnection (
URL,
username,
password);
stmt = con.createStatement();
} catch (Exception e) {
System.err.println("problems connecting to "+URL);
}
try {
ResultSet result = stmt.executeQuery(
"SELECT programmer, cups FROM JoltData ORDER BY cups
DESC;");
result.next(); // move to first row
String name = result.getString("programmer");
int cups = result.getInt("cups");
System.out.println("Programmer "+name+
" consumed the most coffee: "+cups+" cups.");
result = stmt.executeQuery(
"SELECT cups FROM JoltData;");
// for each row of data
cups = 0;
while(result.next()) {
cups += result.getInt("cups");
}
System.out.println("Total sales of "+cups+" cups of coffee.");
con.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
Download