Java Database Connectivity Java Database Connectivity (JDBC) to specyfikacja określająca zbiór klas i interfejsów napisanych w Javie, które mogą być wykorzystane przez programistów tworzących oprogramowanie korzystające z baz danych. Implementacja JDBC jest dostarczany przez producentów baz danych. Jedną z ważniejszych zalet takiego rozwiązania jest ukrycie przed programistą kwestii technicznych dotyczących komunikacji z bazą danych. Dzięki temu ten sam program napisany w Javie może współpracować z różnymi systemami baz danych (np. Oracle, Sybase, IBM DB2). Wystarczy podmienić odpowiednie biblioteki implementujące JDBC. Źródło informacji: http://java.sun.com/j2se/1.4.2/docs/guide/jdbc/getstart/GettingStartedTOC.fm.html. 1
27
Embed
Java Database Connectivity - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_04.pdf · DriverManager DriverManager jest tradycyjną warstwą zarządzającą JDBC pomiędzy użytkownikiem
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Java Database Connectivity
Java Database Connectivity (JDBC) to specyfikacja określająca zbiór klas
i interfejsów napisanych w Javie, które mogą być wykorzystane przez
programistów tworzących oprogramowanie korzystające z baz danych.
Implementacja JDBC jest dostarczany przez producentów baz danych.
Jedną z ważniejszych zalet takiego rozwiązania jest ukrycie przed programistą
kwestii technicznych dotyczących komunikacji z bazą danych. Dzięki temu ten
sam program napisany w Javie może współpracować z różnymi systemami baz
danych (np. Oracle, Sybase, IBM DB2). Wystarczy podmienić odpowiednie
Rejestracja powinna odbywać się automatycznie przy załadowaniu sterownika –
kod statyczny w klasie sterownika.
9
DataSource
DataSource reprezentuje źródło danych. Zawiera informacje identyfikujące i
opisujące dane. Obiekt DataSource współpracuje z technologią Java Naming and
Directory Interface (JNDI), jest tworzony i zarządzany niezależnie od używającej go
aplikacji.
Korzystanie ze źródła danych zarejestrowanego w JNDI zapewnia:
● brak bezpośredniego odwołania do sterownika przez aplikację,
● umożliwia implementację grupowania połączeń (pooling) oraz rozproszonych
transakcji.
Te cechy sprawiają, że korzystanie z klasy DataSource jest zalecaną metodą
tworzenia połączenia z bazą danych, szczególnie w przypadku dużych aplikacji
rozproszonych.10
Standardowe własności DataSource
W wersji 2.0 JDBC określono zbiór własności, które musi posiadać DataSource:
● databaseName - nazwa bazy danych na serwerze bazy danych,
● dataSourceName – nazwa logiczna źródła danych; używana tylko gdy
implementowany jest pooling i rozproszone transakcje,
● description – opis źródła danych,
● networkProtocol – protokół sieciowy używany do komunikacji z serwerem
(String),
● portNumber – numer portu, poprzez który dostajemy się do serwera bazy
danych (int),
● user i password – login i hasło,
● serverName – nazwa serwera lub adres IP 11
Rejestracja źródła danych w JNDI
Przed użyciem obiektu DataSource powinien on zostać zarejestrowany:
VendorDataSource vds = new VendorDataSource();vds.setServerName("moj_serwer");vds.setDatabaseName("nazwa_mojej_bazy");vds.setDescription("tutaj_kroki_opis");
Context ctx = new InitialContext();ctx.bind("jdbc/MojaDB", vds);
Klasa VendorDataSource jest dostarczana przez producenta systemu bazy danych,
w ramach sterownika JDBC.
UWAGA: nazwa VendorDataSource jest przykładowa.
12
Przesyłanie zapytań
Do przesyłania zapytań do bazy danych służą obiekty klasy:
● CallableStatement – procedury zapisane w bazie danych.
Obiekt Statement tworzy się w ramach nawiązanego wcześniej połączenia:
Connection con = DriverManager.getConnection(url, login, pass);Statement stmt = con.createStatement();stmt.executeUpdate("INSERT INTO table(name, price) VALUE 'ser', 2.0");
13
Przesyłanie zapytań
Obiekt Statement zawiera Do przesyłania zapytań służą metody:
(Note that curly braces ({}) in the preceding line indicate that one of the items 17
● d, t oraz ts – data i czas:
{d 'yyyy-mm-dd'}
{d 1999-02-28} zostanie zamienione np. na '28-FEB-99' jeśli taki format jest
używany przez bazę danych. Analogicznie dla TIME i TIMESTAMP:
{t 'hh:mm:ss'} {ts 'yyyy-mm-dd hh:mm:ss.f . . .'}Część ułamkowa sekund (.f...) może zostać opuszczona. ● call lub ?= - wywołanie procedur zapisanych w bazie danych:
{call procedure_name[(?, ?, . . .)]}lub jeśli procedura zwraca wunik:
{? = call procedure_name[(?, ?, . . .)]}DatabaseMetaData.supportsStoredProcedures() mówi, czy baza wspiera
Wyniki zwrócone w wyniku wykonania zapytania są dostępne poprzez obiekt typu
ResultSet. Przykład:
Statement stmt = con.createStatement();ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM table");while (rs.next()) {
// odebranie i wypisanie wyników w bieżącym rekordzieint i = rs.getInt("a");String s = rs.getString("b");float f = rs.getFloat("c");System.out.println("ROW = " + i + " " + s + " " + f);
}
20
Odbieranie danych
21
Więcej informacji o typach danych: http://java.sun.com/j2se/1.4.2/docs/guide/jdbc/getstart/mapping.html#1033804