Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej JDBC Database Access Wykład 12 mgr inż. Michał Misiak.

Slides:



Advertisements
Podobne prezentacje
Indeksy w bazie danych Oracle
Advertisements

Programowanie sieciowe w Javie
Procedury wyzwalane Procedura wyzwalana (ang. trigger) - stanowi kod użytkownika przechowywany wewnątrz bazy i uruchamiany w określonych sytuacjach np.
XML + relacyjne bazy danych
Java i bazy danych Programowanie z wykorzystaniem JDBC mgr inż. Piotr Kopniak.
Bazy danych II Instrukcja SELECT Piotr Górczyński 25/08/2001.
18/11/ Języki programowania 1 Piotr Górczyński Biblioteki.
Kamil Smitkiewicz Bezpieczeństwo w PHP.
SQL Server Native XML Web Services
Rozszerzalność systemów rozproszonych
PHP + MySQL część II.
Relacyjne Bazy Danych wykład XIII
Autor Roman Jędras Prowadzący: dr inż. Antoni Izworski Przedmiot:
Marcin Pamuła Mateusz Stefek
20/09/ Języki programowania 1 Piotr Górczyński Kreator form.
18/11/ Języki programowania 1 Piotr Górczyński Łączenie z bazą danych.
Architektura systemu Gra strategiczna „Strusia Jama”
Podstawy Programowania sieciowego w Javie
RMI I RMI-IIOP Wprowadzenie Co to jest RMI?
PySBQL Język zapytań dla obiektowych baz danych. Aplikacje bazodanowe Główny nurt budowania aplikacji opiera się na połączeniu: SQL JDBC Java Jak wyświetlić
Opracowanie studium przypadku w SAS ETL Studio
Metody autoryzacji użytkowników wymaga integracji z systemem operacyjnym nie wymaga logowania mała pewność mechanizmu wymaga logowania duża pewność mechanizmu.
Wykład 2. Wprowadzenie do architektur systemów rozproszonych
Zaawansowane technologie Javy Wykład 3 (21 lutego 2012) JDBC – programowanie bazodanowe (2)
Proxy (WWW cache) Sieci Komputerowe
Wykład 8 Wojciech Pieprzyca
Wykład 5 Wojciech Pieprzyca
Programowanie wizualne PW – LAB5 Wojciech Pieprzyca.
Enteprise Java Beans Emil Wcisło.
Wzorce projektowe w J2EE
Java – programowanie obiektowe
Rozproszone bazy danych
Architektura systemów wykorzystujących bazy danych (systemów bazodanowych) Wykład S. Kozielski.
Terminy bazodanowe Tabela (relacja) Wiersz (krotka, rekord)
Wprowadzenie do JSP Copyright © Politecnico di Milano September 2003 Translation: Kamil Żyła, Politechnika Lubelska.
MySQL – ODBC - ACCESS.
Transakcje zarządzane kontenerem
Sterownik JDBC i obsługa relacyjnych baz danych w Javie
Administracja serwerem bazy danych Oracle 11g Zarządzanie strukturą bazy danych Wykład nr 2 Michał Szkopiński.
Jerzy Jelinek Paweł Korpowski
Użytkownicy i przywileje Sesja - przykład Błędy Komunikacja międzyskryptowa Wykład 83PD Technologie internetowe.
SQL - Structured Query Language
Java – coś na temat Klas Piotr Rosik
Inicjalizacja i sprzątanie
JAVA.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Aplikacje bazodanowe ADO.NET PHP i MySQL
Wybrane zagadnienia relacyjnych baz danych
Komendy SQL do pracy z tabelami i bazami
18/11/ Języki programowania 1 Piotr Górczyński Kontrolki.
dr Łukasz Murowaniecki T-109
Zpiratował Rafał Kaczyński. Jest to technologia pozwalająca mapować dane obiektowe na odpowiadające im struktury w bazach danych. Hibernate pozwala na.
1 SBD, L.Banachowski Zaawansowane cechy SQL Powtórzenie wyk ł adu 5.
Autor: Damian Urbańczyk
Slajd 1© J.Rumiński Jacek Rumiński  Bazy danych Kontakt: Katedra Inżynierii Biomedycznej, pk. 106, tel.: , fax: ,
Informatyka Stosowana – ROK II / III
Połączenie JSP z MS SQL Server 2000 Łukasz Sak Tomasz Raciborski.
.NET i Bazy Danych Projekt: Wadim Grasza.
Wykład 3 Prowadzący: dr Paweł Drozda. Użytkownik bazy danych – osoba lub aplikacja, mająca dostęp do części danych zgromadzonych w bazie Uprawnienia –
ASP.NET Kontrolki źródła danych i prezentacji danych w ASP.Net
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
Opracowanie studium przypadku w SAS ETL Studio Systemy baz danych i hurtowni danych Ludmiła Binek Katarzyna Rafalska
© 2014 IBM Corporation COMMON POLSKA 2014 JDBC z IBM System i Tomasz Piela & Marcin Wilk Global Technlonogy Services, IBM.
SQL Server Analysis Services Action!
Zaawansowane technologie Javy Wykład 7 (6 kwietnia 2017)
Wydział Matematyki, Informatyki i Architektury Krajobrazu
Strukturalny język zapytań SQL - historia
Aplikacje i usługi internetowe
Technologie Informacyjne Bazy danych
Zapis prezentacji:

Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej JDBC Database Access Wykład 12 mgr inż. Michał Misiak

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 JDBC JDBC API zostało zaprojektowane, aby ułatwić komunikację z relacyjnymi bazami danych oraz innymi typami źródeł danych w heterogenicznych środowiskach. Korzystanie z bazy danych w aplikacji sprowadza się do 3 kroków Podłączenie do źródła danych – w tym przypadku BD Wykonywanie zapytań do bazy danych Odebranie i przetworzenie rezultatu odebranego od bazy danych w odpowiedzi na zapytanie

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Przykład Connection con = DriverManager.getConnection ( "jdbc:myDriver:wombat", "myLogin","myPassword"); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, " + + " b, c FROM Table1"); while (rs.next()) { int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c"); } *) Inicjalizacja obiektu DriverManager w celu podłączenia do bazy danych *) stworzenie wyrażania do wykonania na bazie danych *) inicjalizacja obiektu ResultSet w celu odebrania danych z bazy Źródło:

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Składniki JDBC JDBC API składa się z dwóch pakietów, które są częścią J2SE oraz J2EE: java.sql oraz javax.sql. JDBC DriverManager – definiuje obiekty, które służą do połączenia palikacji ze sterownikami JDBC. Do połączenia wykorzystywany jest obiekt DataSource z pakietu javax.sql, który został zarejestrowany w javax.naming (JNDI). JDBC Test Suite – pozwala określić, czy dane sterowniki działają w aplikacji. JDBC-ODBC Brige – jest to dostęp do bazy danych po przez sterowniki ODBC.

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Przykładowe architektury Aplikacja Java JDBC Właściwy protokół DBMS Maszyna klienta Serwer bazodanowy Architektura dwuwarstwowaArchitektura trzywarstwowa Przeglądarka Serwer Aplikacyjny Java JDBC Maszyna klienta (GUI) HTML, RMI, CORBA, Web Services Maszyna z logiką biznesową Właściwy protokół DBMS Serwer bazodanowy *) Wszelkie zmiany w strukturze pozyskania danych realizowane są na poziomie serwera aplikacyjnego bez ingerencji w aplikacje u klienta *) Uproszczony sposób rozbudowy

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © typy sterowników TYP 1 – sterowniki, które implementują JDBC API mapując do innego API bazodanowego np. ODBC. Sterowniki te są zależne od bibliotek natywnych, które ograniczają przenośność. Przykładem jest JDBC-ODBC Bridge. TYP 2 – sterowniki pisane są częściowo w Javie z kodem natywnym. Te sterowniki wykorzystują natywne biblioteki klienta specyficzne dla danego źródła danych. Z powodu natywnego kodu przenośność ograniczona. TYP 3 – sterowniki napisane w pełni w Javie, które komunikują się przez warstwę pośredniczącą z serwerem korzystając z niezależnych od bazy danych protokołów. TYP 4 – sterowniki, które napisane są w pełni w Javie i implementują specyficzny dla danej bazy danych protokół. Klient łączy się bezpośrednio ze źródłem danych.

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Ustanowienie połączenia z źródłem danych Do połączenia z bazą danych wykorzystywane są dwa mechanizmy: DriverManager – wymaga, aby aplikacja załadowała odpowiedni sterownik JDBC korzystając z umieszczone na stałe w kodzie adresu URL. Początkowo próbuje załadować sterownik wyszczególniony w property jdbc.drivers DataSource – interfejs wykorzystywany przez DriverManager pozwalający zapewnić przeźroczystość źródła danych dla aplikacji. DataSource reprezentuje szczególne źródło danych.

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Ustanowienie połączenia ze źródłem danych (2) Załadowanie sterowników. Class.forName("org.apache.derby.jdbc.XXXXDriver"); Class.forName – tworzy instancję sterowników XXXX (np. Oracle) i rejestruje je w DriverManager Korzystanie z DriverManager Zadaniem DriverManager jest rozpoznanie na podstawie URL rodzaju sterownika oraz jego odnalezieniu. jdbc:XXXX: [lista_wlasciwosci] Connection conn = DriverManager.getConnection("jdbc:XXXX:BazaDanych", login, pass);

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Ustanawianie połączenia przez DataSource DataSource zwiększa przenaszalność aplikacji, gdyż aplikacja korzysta wyłączenie z nazwy źródła, bez wnikania w jego rodzaj. InitialContext ic = new InitialContext(); DataSource ds = ic.lookup("java:comp/env/jdbc/myDB"); Connection con = ds.getConnection(); DataSource ds = (DataSource) org.apache.derby.jdbc.ClientDataSource() ds.setPort(1527); ds.setHost("localhost"); ds.setUser("APP"); ds.setPassword("APP"); Connection con = ds.getConnection();

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Wykorzystanie ANT do utworzenia Tabel <target name="create-db_common" depends="init,start-db,delete-db" description="Create database tables and populate database."> - <sql driver="${db.driver}" url="${db.url}" userid="${db.user}" password="${db.password}" classpathref="db.classpath" delimiter="${db.delimiter}" autocommit="false" onerror="abort"> <transaction src=" {javaee.tutorial.home}/examples/common/sql/ ${db.vendor}/tutorial.sql"/> Wpis do ANT Plik z właściwościami # Database properties are in derby.properties db.delimiter=; db.root=${javaee.home}/XXXX db.driver=org.apache.derby.jdbc.ClientDriver db.datasource=org.apache.derby.jdbc.ClientDataSource db.host=localhost db.port=1527 db.sid=sun-appserv-samples db.url=jdbc:derby://${db.host}:${db.port}/${db.sid};create=true; db.user=APP db.pwd=APP Źródło:

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 ResultSet Interfejs ResultSet udostępnia szereg metod do odbierania i manipulowania danymi Typy ResultSet: TYPE_FORWARD_ONLY – odebrane dane nie są przewijalne. Kurs porusza się wyłącznie do przodu od pierwszego do ostatniego wiersza. TYPE_SCROLL_INSENSITIVE – możliwość poruszania się po wierszach zestawu odebranych danych. Możliwość przesuwania kursora w ściśle określone miejsce lub względem aktualnej pozycji. TYPE_SCROLL_SENSITIVE - możliwość poruszania się po wierszach zestawu odebranych danych. CONCUR_READ_ONLY – możliwość odczytania wyników CONCUR_UPDATABLE – możliwość zaktualizowania wyników Uwaga należy zachować kolejność podwanych typów – najpierw sposób poruszania się po wynikach, potem prawa do odczytu lub aktualizacji. Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet srs = stmt.executeQuery("SELECT COF_NAME, PRICE FROM COFFEES");

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 ResultSet – lista metod next() – przesuwa kurs do następnego wiersza. Jeśli wiersz jest ostatnim zwraca fałsz. previous() – przesuwa kurs jedną pozycje do tyłu. Zwraca fałsz jeśli kurs jest ustawiony na pierwszym wierszu. first() – przesuwa kurs na pierwsza pozycję. Zwraca fałsz jeśli ResultSet nie zawiera ani jednego wiersza. last() – przesuwa kurs do ostatniego wiersza w obiekcie ResultSet. Zwraca fałsz jeśli obiekt ResultSet nie zawiera żadnego wiersza. beforeFirst() – ustawia kursor na pozycję początkową przed pierwszym wierczem. afterLast() – przesuwa kurs na pozycję za ostatnim wierszem. relative(int rows) – przesuwa kursor do obecnej pozycji absolute(int row) – pozycjonuje kursor na określonym wierszu.

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Metody getXXXX z ResultSet ResultSet posiada zestaw metod, które odpowiadają określonym typom danych np. getDouble, getBoolean. Pobieranie danych z określonej kolumny odbywa się po przez odwołanie się do nie po nazwie lub po indeksie. Indeks jest bardziej wydajny. Nazwy kolumn są czułe na małe i duże litery Odbieranie różnych wartości z różnych wersji SQL może się odbywać po przez getString

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Przykład Statement stmt = con.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet srs = stmt.executeQuery( "SELECT COF_NAME, PRICE FROM COFFEES"); while (srs.next()) { String name = srs.getString("COF_NAME"); float price = srs.getFloat("PRICE"); System.out.println(name + " " + price); }

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Aktualizacja danych w bazie Modyfikacja danych realizowana jest w dwóch korkach: modyfikacja danych w obiekcie ResultSet, który jest typu CONCUR_UPDATABLE wysłanie modyfikacje do bazy danych ResultSet posiada metody do wykonywania modyfikacji danych posługujące się indeksem kolumny, bądź jej nazwą Dla każdego z typów występuje osobno metoda updateXXXX, np. updateString, updateFloat W przypadku anulowania modyfikacji danych w określonej kolumnie należy użyć metody: cancelRowUpdates(), za nim zostanie wywołana metoda updateRow() Modyfikacja wiersza realizowana jest w miejscu, gdzie aktualnie znajduje się kursor

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Modyfikacja danych - przykład Statement stmt = conn.createStatement( ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE); ResultSet srs = stmt.executeQuery( "select COF_Name from COFFEES " + "where price = 7.99"); srs.next(); srs.updateString("COF_NAME", "Foldgers"); srs.updateRow(); COF_NAME PRICE Colombian 7.99 French_Roast 8.99 Espresso 9.99 Colombian_Decaf 8.99 French_Roast_Decaf 9.99 Zawartość ResultSet Modyfikacja danych

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Przygotowane wyrażenia Przygotowane wyrażania reprezentuje obiekt preparedStatement i wykorzystywany jest w przypadku częstego wykonywania tego samego zapytania na bazie danych Zaletą jest to, że wyrażanie zostało wcześniej skompilowane. Jest wymagana komplikacja przed zapytaniem do bazy danych, wysłany jest jedynie SQL. PreparedStatement updateSales = con.prepareStatement( "UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ?");... updateSales.setInt(1, 75); updateSales.executeUpdate(): Przykład

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Transakcje Przy tworzeniu połączenia włączany jest tryb auto- commit – każda pojedyncze wyrażenie jest wykonywane jako osobna transakcja. Grupowanie kilku wyrażeń w jedną transakcję można wywołać po przez wyłączenie trybu auto-commit Zatwierdzenie transakcji odbywa się po przez wywołanie metody: con.commit(); Wykorzystanie tzw. SavePoint do wycofywania transakcji za pomocą metody Connection.rollback

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Kolokwium Czas trwania 60 min. Ocena z przedmiotu 60% projekt + 40% kolokwium – należy zaliczyć obydwie części Test do wyboru z wieloma wariantami Zadanie na analizę kodu źródłowego