Programowanie sieciowe w Javie - PowerPoint PPT Presentation

1 / 43
About This Presentation
Title:

Programowanie sieciowe w Javie

Description:

Title: Microsoft Office Outlook 2003 Training Author: Micha Kuciapski Last modified by: Micha Kuciapski Created Date: 11/15/2005 9:30:33 PM – PowerPoint PPT presentation

Number of Views:188
Avg rating:3.0/5.0
Slides: 44
Provided by: MichalKu
Category:

less

Transcript and Presenter's Notes

Title: Programowanie sieciowe w Javie


1
Programowanie sieciowe w Javie
  • Michal Kuciapski
  • m.kuciapski_at_univ.gda.pl

2
Bazy danych
3
Bazy danych
  • Metody dostepu

4
JDBC
  • JDBC (Java Database Connectivity) jest
    interfejsem(sterownikiem) niskiego poziomu jezyka
    Java przeznaczony do bezposredniego wykonywania
    polecen SQL (Structured Query Language).
  • JDBC jest odpowiedzialny za
  • tworzenie polaczenia z baza danych
  • wyslanie polecenia (polecen) SQL
  • przetwarzanie otrzymanych wyników

5
ODBC
  • ODBC (Open DataBase Connectivity) jest
    interfejsem Microsoftu umozliwiajacym równiez
    korzystanie z baz danych, co wiaze sie jednak z
    szeregiem nieodgodnosci specyficznosc i
    ograniczenie metod programowania, koniecznosc
    recznego konfigurowania parametrów polaczenia na
    kazdej platformie.
  • Dla ulatwienia programowania dostepu do baz z
    polaczeniami ODBC utworzony zostal most JDBC-ODBC
    automatycznie

6
DBMS
  • DBMS (DataBase Management System) jest systemem
    zarzadzania bazami danych, którego rola jest
    tworzenie struktury bazy, wypelnianie bazy
    danych, usuwanie, aktualizacja rekordów,
    nadawanie praw dostepu, itp.
  • DBMS najczesciej instalowany jest najczesciej
    wraz z instalacja sterowników.

7
Bazy danych
  • Polaczenia

8
Sterowniki
  • Sterowniki, sa pakietami zawierajacymi
    implementacje deklarowanych klas, atrybutów i
    metod zwiazanych z obsluga dostepu i zarzadzania
    baza danych odnosnie
  • inicjowania i zamykania polaczen
  • wykonywania zapytan (interfejs Statement)
  • zwracania i przetwarzania wyników zapytan
    (interfejs ResultSet)
  • Sterowniki musza wystepowac po stronie
    dokonujacej polaczenie z baza danych a w
    przypadku appletów sterownik musi byc
    zainstalowany na serwerze WWW tam, skad pochodzi
    applet.

9
Sterowniki
  • Dla polaczenia z baza danych konieczne jest
    zainstalowanie odpowiedniego dla niej sterownika.
    Dokonuje sie tego poprzez
  • program instalacyjny
  • rejestracje klasy lub pakietu
  • Klase lub pakiet sterownika rejestrujemy poprzez
    umieszczenie go w odpowiednim podkatalogu jdk
    oraz podanie nazwy jako parametru metody
    statycznej Class.forName() np. dla MySQLa
    Class.forName("com.mysql.jdbc.Driver")

10
Koncepcja
  • Utworzenie polaczenia z baza danych polega
    utworzeniu odpowiedniego obiektu klasy
    Connection. W tym celu stosuje sie jedna z
    przeciazonych statycznych metod getConnection
    klasy DriverManager.
  • Kazda metoda getConnection zawiera jako argument
    adres URL dostepu do bazy - jdbcsterowniklokaliz
    acja

11
Koncepcja c.d.
  • jdbcsterowniklokalizacja, gdzie
  • jdbc element staly okresla nazwe protokolu
  • sterownik okresla nazwe sterownika lub
    mechanizmu polaczenia, np. odbc, mysql
  • lokalizacja opis lokalizacji bazy danych w
    postaci //hostport/sciezka
  • Przyklady
  • jdbcodbcbaza_testowa
  • jdbcmysql//bsvc.univ.gda.pl4000/baza_testowa

12
Tworzenie polaczenia
  • Polaczenie dokonywane jest za pomoca metody
    statycznej getConnection() klasy DriverManager
  • Connection getConnection(String url)
  • Connection getConnection(String url, String info)
  • Connection getConnection(String url, String
    uzytkownik, String haslo)
  • Aby móc skorzystac ze statycznej metody
    getConnection() nalezy zaimportowac klasy pakietu
    java.sql.. Ponadto wymaga ona obsluzenia bledu
    SQLException.

13
Przyklad
  • import java.sql.
  • public class BazaPoloczenie
  • public static void main(String args)
  • try
  • Class.forName("com.mysql.jdbc.Driver")
  • System.out.println("Polaczenie za pomoca
    wylacznie url")
  • Connection poloczenie1 DriverManager.getConn
    ection("jdbcmysql//localhost/firmatest?userroot
    passwordp_at_ssw0rd")
  • System.out.println("Polaczenie za pomoca
    url, loginu i hasla")
  • Connection poloczenie2 DriverManager.getConn
    ection("jdbcmysql//localhost/firmatest","root","
    p_at_ssw0rd")

14
Przyklad c.d.
  • catch(ClassNotFoundException e)
  • System.out.println("Brak klasy "
    e.getMessage())
  • catch(SQLException e)
  • System.out.println("Blad polaczenia
    " e.getMessage())

15
Bazy danych
  • Tworzenie obiektów polecen

16
Wykorzystywane interfejsy
  • W celu wyslania polecenia SQL nalezy stworzyc
    jeden z typów obiektów
  • Statement stanowi kontener dla wykonywanych
    polecen SQL i umozliwia wysylanie polecen SQL nie
    zawierajacych parametrów
  • PreparedStatement uzywany jest do wykonywania
    przygotowanych polecen SQL, zawierajacych jedno
    lub wiecej pól parametrów, oznaczanych znakiem
    "?"
  • CallableStatement jest wykorzystywany do
    tworzenia odwolan do przechowywanych w bazie
    danych procedur

17
Tworzenie interfejsów
  • W celu utworzenia obiektu dla wykonywania polecen
    nalezy wywolac w zaleznosci od typu tworzonego
    obiektu jedna z metod statycznych dla obiektu
    klasy Connection
  • createStatement() dla utworzenia obiektu
    klasy
  • Statement
  • prepareStatement() - dla utworzenia obiektu
    klasy

  • PreparedStatement
  • prepareCall() - dla utworzenia obiektu klasy
  • CallableStatement

18
Definiowanie typów wywolywania polecen
  • Metoda createStatement posiada 3 przeciazenia
  • Statement createStatement() tworzy obiekt klasy
    Statement dla przesylania zapytan SQL do bazy
  • Statement createStatement(int resultSetType, int
    resultSetConcurrency) tworzy obiekt klasy
    Statement, dla którego generowane wyniki
    zapytan beda miec odpowiedni format oraz
    modyfikowalnosc
  • Statement createStatement(int resultSetType, int
    resultSetConcurrency, int resultSetHoldability)
    tworzy obiekt klasy Statement, dla którego
    generowane wyniki zapytan beda miec odpowiedni
    format, modyfikowalnosc oraz zachowania kursora

19
Wartosci parametrów tworzenia obiektów polecen
  • Dla resultSetType
  • ResultSet.TYPE_FORWARD_ONLY - kursor moze
    poruszac sie wylacznie do przodu
  • ResultSet.TYPE_SCROLL_INSENSITIVE - kursor moze
    sie swobodnie poruszac i nie jest wrazliwy na
    zmiany dokonywane przez inne kursory
  • ResultSet.TYPE_SCROLL_SENSITIVE - kursor moze sie
    swobodnie poruszac i jest wrazliwy na zmiany
    dokonywane przez inne kursory

20
Wartosci parametrów tworzenia obiektów polecen
c.d.
  • Dla resultSetConcurrency
  • ResultSet.CONCUR_READ_ONLY zwrócone wartosci
    pól rekordów moga byc wylacznie odczytywane
  • ResultSet.CONCUR_UPDATABLE -zwrócone wartosci pól
    rekordów moga byc zmieniane i aktualizowane dla
    bazy
  • Dla resultSetHoldability
  • ResultSet.HOLD_CURSORS_OVER_COMMIT obiekt klasy
    ResultSet reprezentujacy zwrócone dane w wyniku
    zapytania po wykonaniu metody Connection.commit
    nie ma zostac zamkniety
  • ResultSet.CLOSE_CURSORS_AT_COMMIT - obiekt
    klasy ResultSet reprezentujacy zwrócone dane w
    wyniku zapytania po wykonaniu metody
    Connection.commit ma zostac zamkniety

21
Przyklad
  • import java.sql.
  • public class BazaPoloczenie
  • public static void main(String args)
  • try
  • Class.forName("com.mysql.jdbc.Driver")
  • System.out.println("Polaczenie za pomoca
    wylacznie url")
  • Connection poloczenie1 DriverManager.getConn
    ection("jdbcmysql//localhost/firmatest?userroot
    passwordp_at_ssw0rd")
  • System.out.println("Tworzenie obiektu
    polaczenia")
  • Statement polecenie poloczenie.createStateme
    nt(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CON
    CUR_UPDATABLE)

22
Metody wykonywania polecen
  • Do podstawowych metod wykonywania polecen naleza
  • executeQuery() umozliwia wywolywanie polecen
    typu select i zwraca wynik zapytania jako obiekt
    ResultSet
  • executeUpdate() - umozliwia wywolywanie polecen
    typu insert , update , create , drop , alter i
    zwraca liczbe zmienionych wierszy
  • execute() - przygotowana do obslugi polecen
    zwracajacych wieksza ilosc zbiorów danych
    (obiektów klasy ResultSet)
  • W przypadku obiektu PreparedStatement wyrazenie
    SQL musi byc odpowiednio przygotowane obiekt
    zawiera prekompilowane wyrazenie SQL. Wymaga to
    podania wartosci parametrów za pomoca metod set.

23
Przyklad
  • polecenie.executeUpdate("insert into
    miasto(miasto,gmina,powiat,wojewodztwo)
    values('Tczew','Tczew','Tczewski','Pomorskie')")
  • PreparedStatement poleceniePS
    poloczenie.prepareStatement(
  • "insert into
    miasto(miasto,wojewodztwo) values(?,?)")
  • poleceniePS.setString(1,"Poznan")
  • poleceniePS.setString(2,"Wielkopolskie
    ")
  • poleceniePS.executeUpdate()

24
Bazy danych
  • Rezultaty i ich przetwarzanie

25
Koncepcja
  • W wyniku zapytania typu executeQuery() jako wynik
    zwracany jest obiekt klasy ResultSet zawierajacy
    bedace wynikiem zapytania rekordy.
  • Mozliwe jest wykonywanie szeregu operacji na
    obiekcie tej klasy
  • Przechodzenie kursorem pomiedzy rekordami i
    pobieranie wartosci dla poszczególnych pól
    rekordu
  • Dodawanie, usuwanie, aktualizowanie rekordów
    zarówno dla ResultSet jak i bazy danych
    wylacznie jesli polecenie dla, którego zostal
    utworzony ResultSet bylo ustawione jako typ
    ResultSet.CONCUR_UPDATABLE

26
Metody nawigacji pomiedzy rekordami
  • Metody sluzace przechodzeniu pomiedzy rekordami w
    ramach zwróconego jako wynik zapytania obiektu
    klasy ResultSet
  • previous() powoduje przejscie do rekordu
  • poprzedniego
  • next() powoduje przejscie do rekordu
    nastepnego
  • first() powoduje przejscie do rekordu
    pierwszego
  • last() powoduje przejscie do rekordu
    ostatniego
  • absolute(int rekord) powoduje przejscie do
  • wskazanego rekordu podanego jako
    parametr metody

27
Metody nawigacji pomiedzy rekordami c.d.
  • W trakcie przechodzenia pomiedzy rekordami
    metodami previous() i next() konieczne jest
    sprawdzenie odpowiednio warunków
  • isFirst() zwraca czy biezacy rekord jest
    pierwszym rekordem w ResultSet
  • isLast() - zwraca czy biezacy rekord jest
    ostatnim rekordem w ResultSet

28
Metody informacyjne dla rekordów i ResultSet
  • Najwazniejsze metody sluzace pobieraniu
    informacji o rekordach i obiekcie klasy
    ResultSet
  • getRow() zwraca indeks biezacego rekordu
  • refreshRow() powoduje odswiezenie wartosci
    wiersza zgodnie z aktualna wartoscia w bazie
    danych
  • getMetaData() zwraca metadane o definicji
    rekordu
  • getType() pobiera informacje o typie ResultSet
  • getStatement() pobiera tekst polecenia, które
    spowodowalo utworzenie obiektu ResultSet
  • findColumn(String nazwa) umozliwia sprawdzenie
    wystepowania okreslonej kolumny

29
Pobieranie danych z ResultSet
  • Dane z obiektu klasy ResultSet pobieramy za
    pomoca metody get z przyrostkiem typu danych
    podajac jako parametr badz indeks kolumny lub jej
    nazwe
  • String getString(int indeksKolumny)
  • Float getFloat(String nazwaKolumny)
  • Przyklady
  • jtxbImie.setText(rezultat. getString(2) )
  • jtxbPensja.setText(rezultat.getFloat("pensja").toS
    tring() )

30
Przyklad
  • Class.forName("com.mysql.jdbc.Driver")
  • poloczenie DriverManager.getConnection("
    jdbcmysql//localhost/firmatest?userrootpasswor
    dp_at_ssw0rd")
  • zapytanie poloczenie.createStatement(Res
    ultSet.TYPE_SCROLL_INSENSITIVE,

  • ResultSet.CONCUR_UPDATABLE)
  • rezultat zapytanie.executeQuery("select
    from towar")
  • rezultat.next()
  • wyswietlDane()

31
Przyklad c.d.
  • try
  • jtfSymbol.setText(rezultat.getString(
    "symbol_towaru"))
  • jtfNazwa.setText(rezultat.getString("
    nazwa_towaru"))
  • jtfOpis.setText(rezultat.getString("o
    pis_towaru"))
  • jtfCena.setText(rezultat.getString("c
    ena_towaru"))
  • catch(SQLException e)
  • JFrame ramka new JFrame()
  • JOptionPane.showMessageDialog(ramka,
    "Blad wyswietlenia
  • danych " e.getMessage(),
    "Blad polecenia!",
  • JOptionPane.ERROR_MESSAGE)

32
Dodawanie rekordów
  • Dodania rekordu mozemy dokonac wylacznie, jesli
    parametr resultSetConcurency jest ustawiony na
    ResultSet.CONCUR_UPDATABLE.
  • Procedura dodania rekordu
  • Przejscie do specjalnego rekordu wstawiania za
    pomoca metody moveToInsertRow()
  • Ustawienie wartosci poszczególnych pól z pomoca
    metody update z przyrostkiem wskazujacym typ
    wprowadzanych danych i parametrami indeks lub
    nazwa pola oraz wartosc
  • updateString(String nazwaKolumny, String
    wartosc)
  • updateFloat(int indeks, Float wartosc)

33
Dodawanie rekordów c.d.
  • Procedura dodania rekordu c. d.
  • dodanie rekordu do ResultSet oraz bazy danych za
    pomoca metody insertRow()
  • Przejscie do biezacego rekordu (czyt. rekordu w
    którym bylismy przed przejsciem do rekordu
    wstawiania) za pomoca metody moveToCurrentRow()

34
Dodawanie rekordów - przyklad
  • rezultat.moveToInsertRow()
  • rezultat.updateString("symbol_towaru",jtfSymbol.ge
    tText())
  • rezultat.updateString("nazwa_towaru",jtfNazwa.getT
    ext())
  • rezultat.updateString("opis_towaru",jtfOpis.getTex
    t())
  • rezultat.updateFloat("cena_towaru",
    Float.parseFloat(jtfCena.getText()))
  • rezultat.insertRow()
  • rezultat.moveToCurrentRow()
  • nowyRekord false

35
Usuwanie rekordów
  • Usuniecia rekordu mozemy dokonac wylacznie, jesli
    parametr resultSetConcurency jest ustawiony na
    ResultSet.CONCUR_UPDATABLE.
  • Procedura usuniecia rekordu
  • Wywolanie metody deleteRow() usuwajacej rekord
  • Przejscie do rekordu poprzedniego

36
Usuwanie rekordów - przyklad
  • try
  • rezultat.deleteRow()
  • rezultat.previous()
  • wyswietlDane()
  • catch(Exception e)
  • JFrame ramka new JFrame()
  • JOptionPane.showMessageDialog(ramka,
    "Blad dla przycisku
  • \"Usun\" " e.getMessage(),
    "Blad polecenia!",
  • JOptionPane.ERROR_MESSAGE)

37
Aktualizowanie rekordów
  • Aktualizacja rekordu jest mozliwa wylacznie,
    jesli parametr resultSetConcurency jest
    ustawiony na ResultSet.CONCUR_UPDATABLE.
  • Procedura aktualizacji rekordu
  • Ustawienie wartosci poszczególnych pól z pomoca
    metody update z przyrostkiem wskazujacym typ
    wprowadzanych danych i parametrami indeks lub
    nazwa pola oraz wartosc
  • updateString(String nazwaKolumny, String
    wartosc)
  • updateFloat(int indeks, Float wartosc)
  • Wywolanie metody updateRow()

38
Aktualizowanie rekordów - przyklad
  • if(rezultat.getString("symbol_towaru") !
    jtfSymbol.getText())
    rezultat.updateString("symbol_towaru",jtfSymbol.ge
    tText())
  • if(rezultat.getString("nazwa_towaru") !
    jtfNazwa.getText())
  • rezultat.updateString("nazwa_towaru",
    jtfNazwa.getText())
  • if(rezultat.getString("nazwa_towaru") !
    jtfNazwa.getText())
  • rezultat.updateString("opis_towaru",
    jtfOpis.getText())
  • if(rezultat.getString("cena_towaru") !
    jtfCena.getText())
    rezultat.updateFloat("cena_towaru",
    Float.parseFloat(jtfCena.getText()))
  • rezultat.updateRow()

39
Bazy danych
  • Transakcje

40
Koncepcja
  • Transakcja sklada sie z jednego lub wiecej
    polecen, które zostaly wywolane, wykonane i
    potwierdzone (Commit) lub odrzucone (RollBack).
  • Transakcja stanowi wiec jednostkowa operacje.
    Zarzadzanie transakcja jest szczególnie wazne gdy
    chcemy wykonac naraz kilka operacji traktujac je
    od strony logicznej jako jedna.

41
Procedura
  • ustawienie pracy w stanie bez potwierdzania za
    pomoca
  • polaczenie.setAutoCommit(false), gdzie
    wartosc domyslna ustawiona jest na automatyczne
    potwierdzanie,
  • wykonanie wyrazen SQL
  • potwierdzenie wykonania operacji za pomoca
    polaczenie.commit() , które powoduje, ze zmiany
    spowodowane wyrazeniem SQL staja sie stale.
  • w przypadku bledu mozna wyslac polecenie
    przerwania polaczenie.rollback() powodujace
    odtworzenie stanu przed wykonaniem wyrazenia.

42
Przyklad
  • Connection poloczenie1 DriverManager.getConnecti
    on("jdbcmysql//localhost/firmatest?userrootpas
    swordp_at_ssw0rd")
  • System.out.println("Tworzenie obiektu
    polaczenia")
  • Statement polecenie poloczenie.createStateme
    nt(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CON
    CUR_UPDATABLE)
  • poloczenie.setAutoCommit(false)

43
Przyklad c.d.
  • polecenie.executeUpdate("insert into miasto
    values('Tczew','Tczew','Tczewski','Pomorskie')")
  • PreparedStatement poleceniePS
    poloczenie.prepareStatement(
  • "insert into miasto
    values(?,?,?,?)") poleceniePS.setString
    (2,"Poznan")
  • poleceniePS.setString(5,"Wielkopolskie")
  • poleceniePS.executeUpdate()
  • poloczenie.commit()
  • catch(SQLException e)
  • poloczenie.rollback()
Write a Comment
User Comments (0)
About PowerShow.com