J2EE: Bazy danych c.d. Język zapytań EJB QL.

Slides:



Advertisements
Podobne prezentacje
Podział i zastosowanie
Advertisements

Hibernate zapytania.
Bazy danych i inżynieria oprogramowania
Odwzorowanie obiektowo-relacyjne
Bazy danych II Instrukcja SELECT Piotr Górczyński 25/08/2001.
Bazy danych 8. SQL podstawy P. F. Góra semestr letni 2004/05.
PHP + MySQL część II.
Język SQL ma ciekawe możliwości tworzenia zapytań
Marcin Pamuła Mateusz Stefek
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 2: Język bazy danych - SQL Proste zapytania.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 3: Język bazy danych - SQL Funkcje grupowe.
Hibernate Klasy trwałe
Bezpieczeństwo Procedury składowane Funkcje i Wyzwalacze
Język definicji danych (Data Definition Language)
WYZWALACZE (TRIGGERY) Wyzwalacz jest specjalnym rodzajem procedury składowanej, która może być wykonana w odpowiedzi na jedną z trzech sytuacji: UPDATE.
SQL-owskie szlaki górskie
ASCII(znak IN VARCHAR2) RETURN INTEGER zwraca wartość numeryczną kod ascii znaku CHAR(n Integer)zwraca znak odpowiadający kodowi n CONCAT(tekst1, tekst2)zwraca.
SQLDziałanie select * from tab_kredyt wyświetla wszystko z tab_kredyt select Kredytobiorca, Bank, rodzaj, data_zawarcia, klasyfikacja from tab_kredyt.
SQL select kredytobiorca,bank, rodzaj, data_zawarcia, klasyfikacja,kwota, terminzapadalnosci-data_zawarcia iledni from tab_kredyt where (terminzapadalnosci-data_zawarcia)>1095.
Zapytania SQL: wydajność i optymalizacja
BD-LAB6 Wojciech Pieprzyca
WYKONYWANIE ZAPYTAŃ Przygotował Lech Banachowski na podstawie: 1.Raghu Ramakrishnan, Johannes Gehrke, Database Management Systems, McGrawHill, 2000 (książka.
Odwzorowania relacyjno-obiektowe Hibernate Klasy trwałe.
Odwzorowania relacyjno-obiektowe Hibernate zapytania.
Hibernate relacje.
Język SQL – ciąg dalszy DML (Data Manipulation Language)
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.
SQL – zapytania posumowanie
SQL – Structured Query Language (3)
Przetwarzanie w oknie - nowa siła zapytań
Delphi i Acad cd.. l_poz := MSpace.Count; Label3.Caption:=IntToStr(l_poz); ent:=Mspace.Item(0); for l_poz := 0 to MSpace.Count-1 do begin; ent:=Mspace.Item(l_poz);
Programowanie obiektowe III rok EiT
Tworzenie Aplikacji Internetowych
SQL - Structured Query Language
PL/SQL – dalsza wędrówka
SQL – część II.
1 SBD, L.Banachowski Podstawy SQL - języka relacyjnych i obiektowo-relacyjnych baz danych (SQL2, SQL'1999, Oracle) Powtórzenie wyk ł adu 3.
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski 1 informatyka +
Wydział Elektroniki Kierunek: AiR Zaawansowane metody programowania Wykład 5.
1 SBD, L.Banachowski Zaawansowane cechy SQL Powtórzenie wyk ł adu 5.
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski 1 informatyka +
Język SQL – polecenie Select
Object-relational mapping (aka O/RM, ORM, and O/R mapping)
1 Kolekcje i tablice © Krzysztof Barteczko, PJWSTK 2009.
Asocjacja,Kompozycja,Agregacja
Tworzenie odwołania zewnętrznego (łącza) do zakresu komórek w innym skoroszycie Możliwości efektywnego stosowania odwołań zewnętrznych Odwołania zewnętrzne.
Definiowanie i planowanie zadań typu P 1.  Planowanie zadań typu P  Zadania typu P to zadania unikalne służące zwykle dokonaniu jednorazowej, konkretnej.
Warszawska Wyższa Szkoła Informatyki Andrzej Kuska Promotor : dr inż. Paweł Figat Konsultant : mgr inż. Andrzej Ptasznik.
Zapytania ( 3.0 ) wyrażenia zapytaniowe - querry expressions przestrzeń nazw LINQ - Language-Integrated Query 3 etapy : 1. określenie źródła danych, 2.
API jądra do obsługi przestrzeni użytkownika Co jest tematem tej prezentacji: Transport danych pomiędzy przestrzeniami użytkownika i jądra (asm/uaccess.h)
Język Java Paweł Rajba
BVMS 5.5 Blok2- Moduł 8: Użytkownicy i grupy
PHP (wstęp) Personal Home Page Tools (PHP Tools)
Programowanie Obiektowe – Wykład 1
1.Wstęp Systemy zarządzania bazami danych Prezentacja danych
Algebra relacyjna Przykłady:
DEFINICJA I ZASTOSOWANIE W JĘZYKU HASKELL
Relacyjne Bazy Danych Wykład 02 Wojciech St. Mościbrodzki
Akademia C# - Lab2 Zmienne, instrukcje warunkowe, pętle, debugger,
Session will begin very soon :)
Akademia C# lab. 9 Zdarzenia i delegaty.
Programowanie obiektowe
Kurs języka C++ – wykład 13 ( )
Języki programowania.
Dynamics 365 CE i język TypeScript
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Kwerendy wybierające (Select queries)
Implementacja rekurencji w języku Haskell
Kwerendy funkcjonalne (Action queries)
Zapis prezentacji:

J2EE: Bazy danych c.d. Język zapytań EJB QL

Język EJB QL Pozwala na bardziej zaawansowane wydobywanie danych z bazy niż find() Zapytanie tworzy się przez metodę: manager.createQuery() manager.createNativeQuery() manager.createNamedQuery() Powstający obiekt Query może zostać uruchomiony Najprostszy przykład: lista wszystkich samochodów manager.createQuery("from Samochod s").getResultList();

Język EJB QL Podstawa: klasa Query Pobieranie danych Ustawienia getResultList() getSingleResult() executeUpdate() Ustawienia setFirstResult(int) setMaxResults(int) setParameter(name|position, value|date|calendar) setFlushMode(FlushModeType) setHint(String name, Object value)

Przykłady Cała tabela Jeden rekord Query query = manager.createQuery("from Samochod s"); Collection samochody = (Collection)query.getResultList( ); Jeden rekord Query query = manager.createQuery( "from Samochod s where s.numer='XYZ 123'"); Samochod sam = (Samochod)query.getSingleResult( );

Ustawianie parametrów Parametry wg nazwy Query query = manager.createQuery( "from Samochod s where s.numer=:numer"); query.setParameter("numer","XYZ 123"); Samochod sam = (Samochod)query.getResultList( ); Parametry wg pozycji "from Samochod s where s.numer=?1"); query.setParameter(1,"XYZ 123");

Parametry zagnieżdżone // nazwa to kolumna z klasy Marka!!! public List findByName(String name){ Query query = manager.createQuery( "from Samochod s where marka.nazwa=:nazwa"); query.setParameter("nazwa", name); return query.getResultList(); }

Użycie dat query.setParameter(name, date, temporalType) Trzeci parametr opisuje na jaki typ SQL mapować kolumnę TemporalType.DATE|TIME|TIMESTAMP Query query = manager.createQuery( "from Car c where c.year=:date"); query.setParameter("date", new Date(), TemporalType.DATE); Collection cars = query.getResultList( );

Stronicowanie rezultatów setMaxResults(int limit) setFirstResult(int offset) List getAllCars(int limit, int offset) { Query query = manager.createQuery("from Samochod s"); return query .setMaxResults(limit) .setFirstResult(offset) .getResultList( ); }

Rozszerzanie zapytań Cały obiekt Tylko wybrane kolumny select s from Samochod s Tylko wybrane kolumny select numer, rok from Samochod s Referencje do obiektów powiązanych select numer, marka.nazwa from Samochod s ale nie(!): select nazwa, samochod.numer from Marka m Złączenia select numer, nazwa from Samochod s join s.marka m

Czytanie wielu kolumn List result = manager.createQuery("select number, year from Samochod s").getResultList(); Iterator it = result.iterator(); while(it.hasNext()) { Object[ ] row = (Object[ ])it.next(); String number = (String)row[0]; Date year = (Date)row[1]; }

Tworzenie obiektów na rezultat class CarInfo{ String no; Date pr_year; } ... List result = manager.createQuery("select new CarInfo(number, year) from Samochod s").getResultList(); Iterator it = result.iterator(); while(it.hasNext()) { CarInfo cin = (CarInfo)it.next(); System.out.println(cin.no+" "+cin.pr_year); * UWAGA! Należy dostarczyć odpowiednie konstruktory

Elementy jak w SQL INNER JOIN LEFT JOIN IS NULL BETWEEN, NOT BETWEEN IN, NOT IN LIKE

Elementy specyficzne EJB QL JOIN FETCH IS EMPTY MEMBER OF, NOT MEMBER OF

Funkcje Tekstowe: Matematyczne: ABS, SQRT, MOD LOWER(txt) UPPER(txt) TRIM ([LEADING|TRAILING|BOTH] [sign] txt) CONCAT(txt1, txt2) LENGTH(txt1) LOCATE(txt1, txt2[, start]) SUBSTRING(txt1, start, len) Matematyczne: ABS, SQRT, MOD Datowe: CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP

Inne elementy SQL-like Funkcje agregujące(min, max, sum, avg, count) Fraza DISTINCT Fraza ORDER BY (tylko dla kolumn listowanych) GROUP BY i HAVING Zagnieżdżanie zapytań w WHERE i HAVING ALL, ANY i EXISTS UPDATE i DELETE – dozwolone, ale nie zmieniają automatycznie encji podłączonych (bulk updates)

Inne możliwości Użycie klasycznego SQL Definiowanie "named queries" objekt DataSource objekt NativeQuery Definiowanie "named queries" @NamedQuery("qname","select...") manager.createNamedQuery("qname")

Jak używać zapytań Mniej zapytań – szybsze działanie! Przykład: jak dużo samochodów każdej marki List marki = manager.createQuery("from Marka m") .getResultList(); Iterator it = marki.iterator( ); while (it.hasNext( )) { Marka marka = (Marka)it.next( ); Query query = manager.createQuery( "from Samochod s where marka=:marka"); query.setParameter(„marka", marka); List ilsam = query.getResultList(); System.out.println(marka.getNazwa() + ": " + ilsam.size()); }

Przykład zapytania Popzednio: liczba zapytań = 1+ liczba typów Rozwiązanie jednym zapytaniem: List marki = manager.createQuery( "select m.nazwa, m.typ, count(*) from Marka m"+ "JOIN m.samochody c GROUP BY m.nazwa, " + "m.typ").getResultList(); Iterator it = marki.iterator( ); while (it.hasNext( )) { Object[ ] row = (Object[ ])it.next(); String marka = (String)row[0] + (String)row[1]; Long il = (Long)row[2]; System.out.println(marka+": "+il); }

Przykłady/Ćwiczenia