Terminy bazodanowe Tabela (relacja) Wiersz (krotka, rekord)

Slides:



Advertisements
Podobne prezentacje
Programowanie sieciowe w Javie
Advertisements

Wstęp do strumieni danych
Procedury wyzwalane Procedura wyzwalana (ang. trigger) - stanowi kod użytkownika przechowywany wewnątrz bazy i uruchamiany w określonych sytuacjach np.
Projektowanie bazy danych
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.
Relacyjne Bazy Danych wykład XIII
WPROWADZENIE DO BAZ DANYCH
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.
Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej JDBC Database Access Wykład 12 mgr inż. Michał Misiak.
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ć
Inżynieria oprogramowania Lecture XXX JavaTM – część IV: IO
Co to jest studium przypadku?
Zaawansowane technologie Javy Wykład 3 (21 lutego 2012) JDBC – programowanie bazodanowe (2)
SQL-owskie szlaki górskie
Gniazda komunikacji sieciowej w języku Java
Wykład 8 Wojciech Pieprzyca
Wykład 5 Wojciech Pieprzyca
Programowanie wizualne PW – LAB5 Wojciech Pieprzyca.
Projekt i implementacja aplikacji do zasilania bazy danych testowymi danymi Jacek Lis Promotor: prof. dr hab. inż. Włodzimierz KASPRZAK.
Modele baz danych - spojrzenie na poziom fizyczny
Projektowanie warstwy serwera Wprowadzenie. Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu.
Technologia.Net Bazy danych. Technologia ADO.Net Służy do dostarczania danych z rożnych źródeł (baz danych) do aplikacji Jest produktem Microsoft Umożliwia.
Język SQL (Structured Query Language) DDL (Data Definition Language)
Przykład włamania do aplikacji internetowej poprzez modyfikację zapytań SQL Skrypty ASP Serwer bazy danych MS SQL Server Piotr Kuźniacki BDi.
Teoria relacyjnych baz danych
Wprowadzenie do JSP Copyright © Politecnico di Milano September 2003 Translation: Kamil Żyła, Politechnika Lubelska.
MySQL – ODBC - ACCESS.
Sterownik JDBC i obsługa relacyjnych baz danych w Javie
Bazy danych.
Instrukcje: CREATE, INSERT, UPDATE, DELETE, DROP
Linux - polecenia.
Użytkownicy i przywileje Sesja - przykład Błędy Komunikacja międzyskryptowa Wykład 83PD Technologie internetowe.
Bazy danych podstawowe pojęcia
SYSTEMY TELEINFORMATYCZNE
ASP BAZY. 2.2 S. Wolek Wst. do Inf. Połączenie z bazą danych przez ADO (ActiveX Data Object) do: - źródła ODBC - bazy z podanie nazwy sterownika ODBC.
SQL - Structured Query Language
Aplikacje bazodanowe ADO.NET PHP i MySQL
Jak zacząć w MS SQL? USE master; GO IF DB_ID (Nbaza') IS NOT NULL DROP DATABASE baza; GO CREATE DATABASE baza; GO USE baza; GO.
Wybrane zagadnienia relacyjnych baz danych
Komendy SQL do pracy z tabelami i bazami
MICROSOFT Access TWORZENIE MAKR
18/11/ Języki programowania 1 Piotr Górczyński Kontrolki.
ASP BAZY DANYCH. 2 S. Wolek Wst. do Inf. Połączenie z bazą danych przez ADO (ActiveX Data Object) do: - źródła ODBC - bazy z podanie nazwy sterownika.
PL/SQL – dalsza wędrówka
Projektowanie bazy danych
1 SBD, L.Banachowski Podstawy SQL - języka relacyjnych i obiektowo-relacyjnych baz danych (SQL2, SQL'1999, Oracle) Powtórzenie wyk ł adu 3.
System plików.
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: ,
1 SBD, L.Banachowski Oprogramowanie strony serwera cz. 1 Powtórzenie wyk ł adu 6.
Komendy SQL do pracy z danymi
Informatyka Stosowana – ROK II / III
Połączenie JSP z MS SQL Server 2000 Łukasz Sak Tomasz Raciborski.
.NET i Bazy Danych Projekt: Wadim Grasza.
Konfiguracja HIBERnate, postgresQL + przykładowa aplikacja
Projektowanie postaci formularza:
Współpraca PHP i MySQL Wygodniejszym i wydajniejszym sposobem przechowywania i korzystania z danych zapisanych na serwerze jest współpraca z relacyjna.
Temat: Tworzenie bazy danych
SQL Server Analysis Services Action!
Zaawansowane technologie Javy Wykład 7 (6 kwietnia 2017)
Strukturalny język zapytań SQL - historia
Technologie Informacyjne Bazy danych
Modele baz danych - spojrzenie na poziom fizyczny
Zapis prezentacji:

Terminy bazodanowe Tabela (relacja) Wiersz (krotka, rekord) Kolumna (atrybut) Relacja (związek) Schemat Klucz, klucz główny, klucz obcy

Terminy bazodanowe (ilustracja) tabela id name surname email friends kolumna wiersz klucz główny

Schemat bazy danych  PK – klucz główny (primary key) 1 schemat bazy danych (opis wszystkich tabel i relacji) PK – klucz główny (primary key) id int not null person name varchar(30) surname varchar(40) PK 1  relacja FK – klucz obcy (foreign key) PK id int not null address person_id email varchar(40) PK FK PK FK id name surname 1 Jeden Taki person 5 Mój Przyjaciel 6 Daleki Krewny id person_id email 1 p1@xyz.com address 2 5 p2@post.pl 3 6 p3@noname.org 4 p2@box43.pl

Typy relacji   jeden do jednego (1:1, one to one) jeden do wielu (1:M, one to many) wiele do wielu (M:N, many to many) id id2 PK FK 1 id PK id2 FK 1  id id1 id2 PK FK 1 

JDBC JDBCTM API zapewnia uniwersalny dostęp do baz danych z poziomu języka Java. Niezależne od architektury, przenośne rozwiązanie Wystarczy sterownik do bazy zgodny z JDBC oraz odpowiednie nawiązanie połączenia (reszta programu się nie zmienia) Klasy JDBC są w pakiecie java.sql JDBC 1.0 (tylko SQL), JDBC 2.0 (manipulacje danymi), JDBC 3.0 (nierelacyjne źródła danych) Wyjątki: java.sql.SQLException

Architektura JDBC Java JDBC sterownik JDBC-Net most JDBC-ODBC JDBC API JDBC API sterownika JDBC sterownik JDBC-Net most JDBC-ODBC sterownik firmy A sterownik firmy B • • • sterowniki ODBC, OLE DB Implementacje alternatywne Protokół publiczny Prywatne protokoły dostępu do danych

Odczyt danych z bazy Załadowanie sterownika interfejs java.sql.Driver Otwarcie połączenia interfejs java.sql.Connection Utworzenie obiektu do wykonywania poleceń interfejs java.sql.Statement Odczyt danych i zapamiętanie wyniku interfejs java.sql.ResultSet

Schemat odczytu danych z bazy getMoreResults DriverManager executeQuery ResultSet Statement createStatement Connection getConnection getXYZ executeQuery PreparedStatement prepareStatement setXYZ prepareCall typy danych: Date, Time, Timestamp, Numeric, typy danych Javy, itp. CallableStatement getXYZ

1. Ładowanie sterownika Aby załadować sterownik trzeba użyć Class.forName("nazwa.klasy.sterownika") Maszyna wirtualna musi być w stanie odnaleźć klasę sterownika – trzeba podać pełną nazwę klasy, sama zaś klasa musi być dostępna przez CLASSPATH lub zapisana w ustawieniach maszyny wirtualnej Wszystkie sterowniki JDBC są zarządzane przez klasę DriverManager Każdy sterownik po załadowaniu sam rejestruje się przez wywołanie DriverManager.registerDriver() (i dlatego można go od tej pory używać)

Sterownik most JDBC-ODBC Wiele współczesnych baz danych ma sterowniki ODBC, jednak ODBC jest bardziej odpowiednie dla języka C niż Javy, jest też trudniejsze do nauczenia JDBC w porównaniu daje więcej możliwości, stanowi API wyższego poziomu – używa się kilku interfejsów składających się na JDBC, o resztę dba konkretny sterownik (są jednak też możliwości zaawansowane i rozszerzenia JDBC – pakiet javax.sql) Sterownik platformy Java, umożliwiający dostęp do istniejących sterowników ODBC: sun.jdbc.odbc.JdbcOdbcDriver

Sterowniki natywne Sterownik most korzysta z dodatkowej warstwy pośredniczącej (ODBC), można jednak mieć sterownik natywny – do konkretnej bazy danych Sterownik może być napisany całkowicie w Javie, jest wtedy przenośny i nie trzeba go specjalnie instalować na każdym komputerze (może być np. spakowany razem z aplikacją) Jeden ze sterowników do MySQL: org.gjt.mm.mysql.Driver Aby używać sterownika, można np. zmienić ścieżkę: CLASSPATH=.;C:\mysql\jdbc\mm.mysql-2.0.4-bin.jar

2. Nawiązywanie połączenia JDBC 1.0 – DriverManager.getConnection() JDBC 3.0 – DataSource.getConnection() Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection conn; try { conn = DriverManager.getConnection( "jdbc:odbc:friends", "user", "pwd"); } } catch (SQLException e) { System.out.println( "SQLException: " + e.getMessage() + "\nSQLState: " + e.getSQLState() + "\nVendorError: " + e.getErrorCode()); e.printStackTrace(); }

Identyfikator źródła danych Przy otwieraniu połączenia do bazy danych należy podać łańcuch połączenia (JDBC URL) Składa się on z następujących części: Podnazwa może być np. aliasem ODBC źródła danych (DSN – Data Source Name), albo może mieć ogólnie zalecaną postać: jdbc : <protokół> <podnazwa> // / serwer : nazwa_źródła_danych port elementy opcjonalne

Ile trzeba nam połączeń? DriverManager Connection Connection Aplikacja 1 Aplikacja 2 ResultSet Statement ResultSet Statement Statement Statement ResultSet ResultSet Statement ResultSet Statement Statement

Stan połączeń Jeśli DriverManager zwrócił połączenie – to jest ono otwarte (jeśli nastąpi błąd, pojawi się wyjątek) Połączenie można zamknąć – Connection.close() Jeśli połączenie zostało zamknięte, metoda Connection.isClosed() zwraca true Nie używa się isClosed() aby sprawdzać czy połączenie jest w dobrym stanie (tylko czy zostało faktycznie zamknięte) Raczej można dowiedzieć się czy coś jest nie w porządku z połączeniem, łapiąc wyjątki jakie pojawiają się przy próbie wykonania operacji JDBC

3. Wydawanie poleceń Do wykonywania poleceń SQL (manipulowania danymi) w ramach połączenia z bazą danych, trzeba użyć obiektu polecenia. JDBC zawiera trzy klasy dla obiektów poleceń: Statement – głównie odczyt danych, ale także wykonywanie zmian w bazie przez polecenia SQL PreparedStatement – przechowuje wstępnie przygotowane polecenie SQL, z parametrami (szybsze przetwarzanie) CallableStatement – wywołanie procedury składowanej z bazy danych

Tworzenie obiektów poleceń Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery( "select * from person"); stmt.executeUpdate( "insert into person (name, surname) values " + " (\'John\', \'Doe\')," + " (\'Scott\', \'McNealy\')"); PreparedStatement pstmt = conn.prepareStatement( "UPDATE EMPLOYEES SET SALARY = ? WHERE ID = ?"); pstmt.setBigDecimal(1, 153833.00); pstmt.setInt(2, 110592); CallableStatement cstmt = conn.prepareCall( "CALL GENERATE_REPORT");

4. Odczyt danych – ResultSet first() / last() beforeFirst() / afterLast() next() / previous() absolute() / relative() isFirst() / isLast() isBeforeFirst() / isAfterLast() Uwaga: wczytanie pustego zbioru danych powoduje, że w zbiorze nie ma pierwszego rekordu i cztery ostatnie metody zawsze zwracają wartość logiczną false przechodzenie po wierszach pytanie o położenie

Zmiany bieżącego wiersza 1 101 108 152 153 Adam Nowak Piotr Goniec Maria Woźniczka Stanisław Wspaniały 2 3 ResultSet na początku jest przed zbiorem danych (isBeforeFirst() zwraca true) Każde wywołanie next() przesuwa go do przodu o jeden (jeśli się udało – zwrócone będzie true) Po skończeniu się zbioru danych ResultSet jest za zbiorem danych (isAfterLast() zwraca true)

Przykład odczytu danych /* Zakładamy, że połączenie 'conn' jest już utworzone i używa bazy 'friends' */ Statement stmt = conn.createStatement(); // Odczyt zbioru danych ResultSet rs = stmt.executeQuery( "select * from person"); // Przechodzenie do kolejnych wierszy while (rs.next()) { // Wyciągnięcie danych z bieżącego wiersza int id = rs.getInt(1); String name = rs.getString(2); String surname = rs.getString("surname"); // Wyświetlenie danych System.out.println(id + " : " + name + " , " + surname); }

Różnice w obsłudze danych ResultSet w JDBC 1.0 może odczytywać dane tylko do przodu ResultSet w JDBC 2.0 jest przewijalny, tzn. ma możliwość przechodzenia do przodu, do tyłu oraz do wybranego wiersza (ang. scrollable) W JDBC 2.0 można zmodyfikować dane odczytane w ResultSet używając jego metod, a następnie wysłać te zmiany do bazy

Porządki ? Należy zamykać połączenia i obiekty poleceń kiedy nie są potrzebne Służą do tego metody: Statement.close() oraz Connection.close() Zaleca się jawnie zamykać powyższe obiekty (szybsze zwalnianie zewnętrznych zasobów) Jeśli nie, połączenia będą zamykane dopiero przy odśmiecaniu pamięci