JDBC Database Access - PowerPoint PPT Presentation

1 / 19
About This Presentation
Title:

JDBC Database Access

Description:

JDBC Database Access Wyk ad 12 mgr in . Micha Misiak JDBC JDBC API zosta o zaprojektowane, aby u atwi komunikacj z relacyjnymi bazami danych oraz innymi ... – PowerPoint PPT presentation

Number of Views:90
Avg rating:3.0/5.0
Slides: 20
Provided by: Michal66
Category:
Tags: jdbc | access | corba | database | j2ee

less

Transcript and Presenter's Notes

Title: JDBC Database Access


1
JDBC Database Access
  • Wyklad 12

mgr inz. Michal Misiak
2
JDBC
  • JDBC API zostalo zaprojektowane, aby ulatwic
    komunikacje z relacyjnymi bazami danych oraz
    innymi typami zródel danych w heterogenicznych
    srodowiskach.
  • Korzystanie z bazy danych w aplikacji sprowadza
    sie do 3 kroków
  • Podlaczenie do zródla danych w tym przypadku BD
  • Wykonywanie zapytan do bazy danych
  • Odebranie i przetworzenie rezultatu odebranego od
    bazy danych w odpowiedzi na zapytanie

3
Przyklad
) Inicjalizacja obiektu DriverManager w celu
podlaczenia do bazy danych ) stworzenie
wyrazania do wykonania na bazie danych )
inicjalizacja obiektu ResultSet w celu odebrania
danych z bazy
Connection con DriverManager.getConnection (
"jdbcmyDriverwombat", "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")
Zródlo http//java.sun.com/docs/books/tutorial/jd
bc/overview/index.html
4
Skladniki JDBC
  • JDBC API sklada sie z dwóch pakietów, które sa
    czescia J2SE oraz J2EE java.sql oraz javax.sql.
  • JDBC DriverManager definiuje obiekty, które
    sluza do polaczenia palikacji ze sterownikami
    JDBC. Do polaczenia wykorzystywany jest obiekt
    DataSource z pakietu javax.sql, który zostal
    zarejestrowany w javax.naming (JNDI).
  • JDBC Test Suite pozwala okreslic, czy dane
    sterowniki dzialaja w aplikacji.
  • JDBC-ODBC Brige jest to dostep do bazy danych
    po przez sterowniki ODBC.

5
Przykladowe architektury
Architektura dwuwarstwowa
Architektura trzywarstwowa
Przegladarka
Maszyna klienta (GUI)
Maszyna klienta
HTML, RMI, CORBA, Web Services
Maszyna z logika biznesowa
Wlasciwy protokól DBMS
Wlasciwy protokól DBMS
Serwer bazodanowy
Serwer bazodanowy
) Wszelkie zmiany w strukturze pozyskania danych
realizowane sa na poziomie serwera aplikacyjnego
bez ingerencji w aplikacje u klienta )
Uproszczony sposób rozbudowy
6
4 typy sterowników
  • TYP 1 sterowniki, które implementuja JDBC API
    mapujac do innego API bazodanowego np. ODBC.
    Sterowniki te sa zalezne od bibliotek natywnych,
    które ograniczaja przenosnosc. Przykladem jest
    JDBC-ODBC Bridge.
  • TYP 2 sterowniki pisane sa czesciowo w Javie z
    kodem natywnym. Te sterowniki wykorzystuja
    natywne biblioteki klienta specyficzne dla danego
    zródla danych. Z powodu natywnego kodu
    przenosnosc ograniczona.
  • TYP 3 sterowniki napisane w pelni w Javie,
    które komunikuja sie przez warstwe posredniczaca
    z serwerem korzystajac z niezaleznych od bazy
    danych protokolów.
  • TYP 4 sterowniki, które napisane sa w pelni w
    Javie i implementuja specyficzny dla danej bazy
    danych protokól. Klient laczy sie bezposrednio ze
    zródlem danych.

7
Ustanowienie polaczenia z zródlem danych
  • Do polaczenia z baza danych wykorzystywane sa dwa
    mechanizmy
  • DriverManager wymaga, aby aplikacja zaladowala
    odpowiedni sterownik JDBC korzystajac z
    umieszczone na stale w kodzie adresu URL.
    Poczatkowo próbuje zaladowac sterownik
    wyszczególniony w property jdbc.drivers
  • DataSource interfejs wykorzystywany przez
    DriverManager pozwalajacy zapewnic
    przezroczystosc zródla danych dla aplikacji.
    DataSource reprezentuje szczególne zródlo danych.

8
Ustanowienie polaczenia ze zródlem danych (2)
  • Zaladowanie sterowników.
  • Class.forName("org.apache.derby.jdbc.XXXXDriver")
  • Class.forName tworzy instancje 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.
  • jdbcXXXXltNazwaBazyDanychgtlista_wlasciwosci
  • Connection conn DriverManager.getConnection("jdb
    cXXXXBazaDanych", login, pass)

9
Ustanawianie polaczenia przez DataSource
DataSource zwieksza przenaszalnosc aplikacji,
gdyz aplikacja korzysta wylaczenie z nazwy
zródla, bez wnikania w jego rodzaj.
InitialContext ic new InitialContext() DataSour
ce ds ic.lookup("javacomp/env/jdbc/myDB")
Connection con ds.getConnection() DataSource
ds (DataSource) org.apache.derby.jdbc.ClientData
Source() ds.setPort(1527) ds.setHost("localhost
") ds.setUser("APP") ds.setPassword("APP")
Connection con ds.getConnection()
10
Wykorzystanie ANT do utworzenia Tabel
Wpis do ANT
lttarget name"create-db_common"
depends"init,start-db,delete-db"
description"Create database tables and populate
database."gt - ltsql driver"db.driver"
url"db.url" userid"db.user"
password"db.password" classpathref"db.classpa
th" delimiter"db.delimiter"
autocommit"false" onerror"abort"gt
lttransaction src"
javaee.tutorial.home/examples/common/sql/
db.vendor/tutorial.sql"/gt
lt/sqlgt lt/targetgt
Plik z wlasciwosciami
Database properties are in derby.properties
db.delimiter db.rootjavaee.home/XXXX
db.driverorg.apache.derby.jdbc.ClientDriver
db.datasourceorg.apache.derby.jdbc.ClientDataSou
rce db.hostlocalhost db.port1527
db.sidsun-appserv-samples db.urljdbcderby//
db.hostdb.port/db.sidcreatetrue
db.userAPP db.pwdAPP
Zródlo http//java.sun.com/docs/books/tutorial/jd
bc/overview/index.html
11
ResultSet
  • Interfejs ResultSet udostepnia szereg metod do
    odbierania i manipulowania danymi
  • Typy ResultSet
  • TYPE_FORWARD_ONLY odebrane dane nie sa
    przewijalne. Kurs porusza sie wylacznie do
    przodu od pierwszego do ostatniego wiersza.
  • TYPE_SCROLL_INSENSITIVE mozliwosc poruszania
    sie po wierszach zestawu odebranych danych.
    Mozliwosc przesuwania kursora w scisle okreslone
    miejsce lub wzgledem aktualnej pozycji.
  • TYPE_SCROLL_SENSITIVE - mozliwosc poruszania sie
    po wierszach zestawu odebranych danych.
  • CONCUR_READ_ONLY mozliwosc odczytania wyników
  • CONCUR_UPDATABLE mozliwosc zaktualizowania
    wyników
  • Uwaga nalezy zachowac kolejnosc podwanych typów
    najpierw sposób poruszania sie po wynikach, potem
    prawa do odczytu lub aktualizacji.

Statement stmt con.createStatement(ResultSet.TYP
E_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY
) ResultSet srs stmt.executeQuery("SELECT
COF_NAME, PRICE FROM COFFEES")
12
ResultSet lista metod
  • next() przesuwa kurs do nastepnego wiersza.
    Jesli wiersz jest ostatnim zwraca falsz.
  • previous() przesuwa kurs jedna pozycje do tylu.
    Zwraca falsz jesli kurs jest ustawiony na
    pierwszym wierszu.
  • first() przesuwa kurs na pierwsza pozycje.
    Zwraca falsz jesli ResultSet nie zawiera ani
    jednego wiersza.
  • last() przesuwa kurs do ostatniego wiersza w
    obiekcie ResultSet. Zwraca falsz jesli obiekt
    ResultSet nie zawiera zadnego wiersza.
  • beforeFirst() ustawia kursor na pozycje
    poczatkowa przed pierwszym wierczem.
  • afterLast() przesuwa kurs na pozycje za
    ostatnim wierszem.
  • relative(int rows) przesuwa kursor do obecnej
    pozycji
  • absolute(int row) pozycjonuje kursor na
    okreslonym wierszu.

13
Metody getXXXX z ResultSet
  • ResultSet posiada zestaw metod, które odpowiadaja
    okreslonym typom danych np. getDouble,
    getBoolean.
  • Pobieranie danych z okreslonej kolumny odbywa sie
    po przez odwolanie sie do nie po nazwie lub po
    indeksie. Indeks jest bardziej wydajny.
  • Nazwy kolumn sa czule na male i duze litery
  • Odbieranie róznych wartosci z róznych wersji SQL
    moze sie odbywac po przez getString

14
Przyklad
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(na
me " " price)
15
Aktualizacja danych w bazie
  • Modyfikacja danych realizowana jest w dwóch
    korkach
  • modyfikacja danych w obiekcie ResultSet, który
    jest typu CONCUR_UPDATABLE
  • wyslanie modyfikacje do bazy danych
  • ResultSet posiada metody do wykonywania
    modyfikacji danych poslugujace sie indeksem
    kolumny, badz jej nazwa
  • Dla kazdego z typów wystepuje osobno metoda
    updateXXXX, np. updateString, updateFloat
  • W przypadku anulowania modyfikacji danych w
    okreslonej kolumnie nalezy uzyc metody
    cancelRowUpdates(), za nim zostanie wywolana
    metoda updateRow()
  • Modyfikacja wiersza realizowana jest w miejscu,
    gdzie aktualnie znajduje sie kursor

16
Modyfikacja danych - przyklad
Modyfikacja danych
Zawartosc ResultSet
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
17
Przygotowane wyrazenia
  • Przygotowane wyrazania reprezentuje obiekt
    preparedStatement i wykorzystywany jest w
    przypadku czestego wykonywania tego samego
    zapytania na bazie danych
  • Zaleta jest to, ze wyrazanie zostalo wczesniej
    skompilowane. Jest wymagana komplikacja przed
    zapytaniem do bazy danych, wyslany jest jedynie
    SQL.

Przyklad
PreparedStatement updateSales
con.prepareStatement( "UPDATE COFFEES SET SALES
? WHERE COF_NAME LIKE ?") ... updateSales.se
tInt(1, 75) updateSales.executeUpdate()
18
Transakcje
  • Przy tworzeniu polaczenia wlaczany jest tryb
    auto-commit kazda pojedyncze wyrazenie jest
    wykonywane jako osobna transakcja.
  • Grupowanie kilku wyrazen w jedna transakcje mozna
    wywolac po przez wylaczenie trybu auto-commit
  • Zatwierdzenie transakcji odbywa sie po przez
    wywolanie metody con.commit()
  • Wykorzystanie tzw. SavePoint do wycofywania
    transakcji za pomoca metody Connection.rollback

19
Kolokwium
  • Czas trwania 60 min.
  • Ocena z przedmiotu 60 projekt 40 kolokwium
    nalezy zaliczyc obydwie czesci
  • Test do wyboru z wieloma wariantami
  • Zadanie na analize kodu zródlowego
Write a Comment
User Comments (0)
About PowerShow.com