Informatyka I Programowanie aplikacji bazodanowych w języku Java. Standard JDBC. dr hab. inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2019
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
Sterownik DBC Komunikacja aplikacji z bazą danych Aplikacja komputerowa System zarządzania bazą danych Baza danych
Struktura JDBC Java Platform BD JDBC API JDBC Driver Biblioteka Java Producent BD
JDBC API JDBC API biblioteka klas przeznaczonych do wysyłania kwerend w języku SQL do BD oraz pobrania wyników wykonania zapytania JDBC API jest częścią środowiska Java Platform Standard Edition (JSE) Każdy system baz danych (DBMS) w celu korzystania z JDBC API powinien posiadać własny sterownik JDBC
Podstawowe klasy JDBC API DriverManager Connection Statement ResultSet
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
Architektura dwuwarstwowa Java Application JDBC Stacja robocza 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 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
Relacyjna baza danych Producent: Microsoft Wersja aktualna: SQL 2019 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 Microsoft JDBC Driver 6.4 for 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 mssql-jdbc-6.4.0.jre8.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 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
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 połączenia String cs = "jdbc:sqlserver://127.0.0.1:1433;" + "databasename=wtpw;" + "user=student;" + "password=$tudent;" + "instancename=.\\sql2014ex;";
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 Connection 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 kwerend do serwera bazy danych oraz (opcjonalnie) odbierania wyników Funkcja execute(string) wykonuje polecenie SQL
String query = Przykład "INSERT INTO STUDENCI (Album, Nazwisko, Imię, Grupa, Ocena) VALUES (123456, 'Kowalski', 'Jan', 'T9', 5)"; st.execute( query );
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