Informatyka I Standard JDBC Programowanie aplikacji bazodanowych w języku Java dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2017
Standard JDBC Java DataBase Connectivity uniwersalny interfejs programowania (API) aplikacji bazodanowych w języku Java Funkcje: Nawiązanie połączenia z systemem baz danych z poziomu aplikacji Java Wstawianie, usuwanie oraz aktualizacja danych Pobieranie danych z bazy oraz ich przetwarzanie
JDBC API JDBC API biblioteka klas pozwalających na wysłanie kwerend w języku SQL do BD oraz pobrania wyników wykonania zapytania JDBC API jest częścią środowiska Java Platform Standard Edition (J2SE) Każdy system baz danych (DBMS) w celu korzystania z JDBC API powinien posiadać własny sterownik JDBC
Struktura JDBC API Java Platform BD JDBC API JDBC Driver Biblioteka Java Producent BD
Podstawowe klasy JDBC API DriverManager klasa odpowiedzialna za nawiązanie połączenia pomiędzy aplikacją Java a systemem BD Connection Zarządzanie połączeniem sieciowym z BD Statement Pojedyncza instrukcja języka SQL ResultSet Wynik wykonania instrukcji SQL SQLException Wyjątek SQL
Typowa kolejność tworzenia obiektów DriverManager Connection Statement ResultSet
Architektura dwuwarstwowa Java Application JDBC Stacja kliencka DBMS Serwer baz danych
Architektura dwuwarstwowa (c.d.) Aplikacja Java komunikuje się z bazą danych bezpośrednio poprzez sterownik JDBC Źródło danych może się znajdować na tym samym bądź innym komputerze w sieci Schemat często stosowany w sieciach Intranet (połączenie przez Internet wymaga większych środków bezpieczeństwa) Aplikacje typu desktop
Architektura trójwarstwowa Java Applet lub Przeglądarka WWW Klient Protokół HTTP Aplikacja serwerowa JDBC DBMS Serwer aplikacji Serwer baz danych
Architektura trójwarstwowa (c.d.) Użytkownik końcowy komunikuje się z aplikacją na serwerze (warstwa prezentacji) Aplikacja serwerowa (druga warstwa logika biznesowa) interpretuje rozkazy użytkownika na polecenia BD i zwraca mu wyniki Baza danych stanowi trzecią warstwę systemu Aplikacje WWW
Charakterystyki Microsoft SQL Server Relacyjna baza danych Producent: Microsoft Wersja obecna: SQL 2014 Posiada wersje komercyjne (Standard, DataCenter, Developer etc.) oraz bezpłatne (Express, ograniczone możliwości: pamięć, 1 procesor)
Pobranie sterownika JDBC dla Microsoft SQL Server http://msdn.microsoft.com/en-us/sqlserver/aa937724
Wybór wersji sterownika JDBC dla Microsoft SQL Server
Podłączenie biblioteki klas JDBC do aplikacji Java Rozwinąć widok Projektu W sekcji [Libraries] wybrać z menu kontekstowego opcję [Add JAR/Folder] Następnie znaleźć na dysku i podłączyć plik sqljdbc4.jar
Klasa SQLServerDriver Odpowiada za komunikację ze sterownikiem serwera baz danych Microsoft SQL Server Podłączenie dynamiczne klasy SQLServerDriver do aplikacji odbywa się za pomocą konstrukcji Class.forName z podaniem pełnej ścieżki dostępu do pliku klasy
Parametry połączenia z serwerem baz danych Adres IP serwera (lub jego nazwa sieciowa) Port IP Opcjonalnie, jeśli nie jest podany jest wykorzystywany port domyślny (MSSQL = 1433) Nazwa bazy danych Login i hasło Opcjonalnie, w systemach Windows istnieje możliwość łączenia się za pomocą zaufanego konta użytkownika Windows
Parametry połączenia z serwerem baz danych (c.d.) W programie parametry połączenia z serwerem baz danych są najczęściej zapisywane w postaci danej typu String jdbc:sqlserver://[adres]:[port]; databasename=[nazwa BD]; user=[login użytkownika]; password=[hasło użytkownika]; instancename=[nazwa instancji SQL Server]; Przykład:
Klasa DriverManager Klasa zarządza połączeniami z bazą danych Parametry połączenia są przekazywane do funkcji getconnection( String ) W przypadku pomyślnego nawiązania połączenia z BD, klasa DriverManager zwraca obiekt typu Connection Przykład:
Klasa java.sql.connection Klasa odpowiada za utrzymanie połączenia z serwerem bazy danych Funkcje sprawdzenia stanu połączenia oraz jego zamknięcia Funkcja createstatement() zwraca obiekt klasy Statement, za pomocą którego są wysyłane zapytania SQL do bazy danych oraz odbierane są wyniki Przykład:
Klasa java.sql.statement Realizuje obsługę wysyłania pojedynczych poleceń do serwera baz danych oraz (opcjonalnie) odbierania wyników Funkcja execute(string) wykonuje polecenie SQL Przykład:
Klasa java.sql.statement (c.d.) Odbiór wyników zapytania odbywa się za pomocą obiektu klasy ResultSet zwracanego przy wywołaniu funkcji executequery( String ) Wynikiem dowolnego zapytania SQL jest tabela może się składać z 0 wierszy i przynajmniej 1 kolumny Organizacja dostępu do danych ResultSet Wiersze tabeli są czytane po kolei Kolumny są adresowane wg numeru (1..N) lub nazwy kolumny Przykład:
Klasa java.sql.resultset (c.d.) Koncepcja dostępu do danych ResultSet first Columns 1 (student) 2 (album) 3 (grupa) Current row Jan Nowak 12345 T3 last
Klasa java.sql.resultset (c.d.) Realizacja dostępu do danych odbywa się za pomocą funkcji next() przechodzi do następnego rekordu Zwraca false jeśli osiągnięto koniec ResultSet getint( String kolumna ) getstring( String kolumna ) getboolean( String kolumna ) itp. Zwraca wartość odpowiedniego typu we wskazanej kolumnie bieżącego rekordu
Klasa java.sql.resultset (c.d.) Przykład
Parametryzacja zapytań SQL Zapytanie SQL może być zapisane w formie parametryzowanej SELECT * FROM STUDENCI WHERE GRUPA =? Zamiast? w czasie wykonania zapytania należy podstawić odpowiednią daną (numer grupy np. wprowadzony z klawiatury) Parametryzowane zapytania obsługuje klasa PreparedStatement
Parametryzacja zapytań SQL (c.d.) Przykład
Procedury składowane Procedura składowana (ang. Stored Procedure) procedura napisana w języku SQL przechowywana i uruchamiana na serwerze Procedury składowane pozwalają na ukrycie realizacji wewnętrznej struktury bazy danych oraz przyspieszenie wykonania zapytań SQL Procedury mogą mieć parametry (zmienne) oraz zwracać wynik zapytania
Procedury składowane (c.d.) Przykład procedury składowanej CREATE PROCEDURE ListaGrup AS SELECT GRUPA, COUNT (*) FROM STUDENCI GROUP BY GRUPA
Procedury składowane (c.d.) Wywołanie procedury w kodzie programu odbywa się za pomocą klasy CallableStatement