You are on page 1of 20

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

JDBC. Leksykon
kieszonkowy
Autor: Donald Bales
Tumaczenie: Jarosaw Gierlicki
ISBN: 83-7361-165-7
Tytu oryginau: JDBC Pocket Reference
Format: B5, stron: 196

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Podrczny przewodnik dla programistw Javy


JDBC jest jednym z najwszechstronniejszych i najszerzej stosowanych mechanizmw
umoliwiajcych nie tylko dostp do danych z programw napisanych w Javie,
ale rwnie wykonywanie rozmaitych operacji na bazach danych. Kosztem
wszechstronnoci jest zoono JDBC implementuje ogromn liczb klas, interfejsw
i metod, z ktrymi trzeba si gruntownie zapozna. Niemoliwoci jest zapamitanie
ich wszystkich.
JDBC. Leksykon kieszonkowy jest podrcznym leksykonem uatwiajcym szybkie
odnalezienie opisu kadej z klas, interfejsw czy metod tworzcych JDBC API.
Przydaje si zwaszcza w sytuacjach, w ktrych wiadomo, co si chce osign
i potrzebna jest informacja na temat metod JDBC, ktre mog w tym pomc.
Oprcz opisu API ksika zawiera take kilka krtkich rozdziaw bdcych swego
rodzaju instrukcj obsugi JDBC, czyli przypomnieniem, w jaki sposb czy ze sob
rne elementy API w celu uzyskania rozwiza konkretnych zada.
Nie pamitasz, jak naraz wykona kilka operacji wstawiania lub modyfikacji lub w jaki
sposb przechowywa i pobiera wielkie obiekty? Niniejsza ksika na pewno odwiey
Twoj pami.
Donald Bales jest konsultantem do spraw aplikacji komputerowych specjalizujcym si
w analizie, projektowaniu oraz programowaniu systemw rozproszonych. Posiada
ponad picioletnie dowiadczenie w pisaniu aplikacji w Javie operujcych na bazach
danych za pomoc JDBC.

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Spis treci

Wprowadzenie......................................................................... 5
Konstrukcje importowania ................................................... 8
Sterowniki JDBC..................................................................... 9
Typy sterownikw......................................................................................9
Adresy URL baz danych ..........................................................................10

Ustanawianie poczenia.................................................... 17
Uywanie menedera sterownikw.......................................................17
Uywanie JNDI..........................................................................................19

Pzegldanie metadanych bazy danych............................. 20


Dynamiczne wykonywanie polce SQL........................... 21
Wykonywanie konstrukcji DDL .............................................................21
Wykonywanie konstrukcji INSERT, UPDATE oraz DELETE ...........22
Wykonywanie konstrukcji SELECT.......................................................23

Wykonywanie prekompilowanych polece SQL............ 25


Wykonywanie procedur osadzonych................................. 27
Otrzymywanie wynikw zapyta..................................... 29
Przegldanie zbioru wynikowego .........................................................31
Pobieranie wartoci z kolumn ................................................................32
Wstawianie, modyfikowanie i usuwanie wierszy
za pomoc zbioru wynikowego .............................................................33
Dynamiczne okrelanie charakterystyki zbioru wynikowego ..........35

Mapowanie typw danych SQL i Javy............................ 38

Obsuga wartoci NULL ..................................................... 38


Wykrywanie wartoci NULL za pomoc metody wasNull().............40
Wykrywanie wartoci NULL za pomoc obiektu BigDecimal..........41
Ustawianie wartoci w kolumnie jako NULL......................................42

Wstawianie i modyfikowanie grupowe ........................... 42


Praca z wielkimi obiektami ............................................... 44
Wstawienie obiektu BLOB ......................................................................45
Pobranie obiektu BLOB ...........................................................................46

Typy danych definiowane przez uytkownika............... 47


Tworzenie klas Javy dla typw UDT.....................................................48
Aktualizowanie mapy typw .................................................................50
Wstawianie typw UDT...........................................................................51
Pobieranie typw UDT.............................................................................52

Zestawy wierszy................................................................... 53
Skadnia wyrae przenonych.......................................... 54
Zarzdzanie transakcjami .................................................. 57
JDBC API ............................................................................... 57

Dynamiczne wykonywanie
polece SQL
Za pomoc obiektu  mona dynamicznie wykona konstrukcje DDL SQL lub DML SQL. Obiekt  otzymujemy na
podstawie obiektu poczenia, wywoujc jego metod 

w nastpujcy sposb:
   
 
 
    



  



Obiekt  posiada trzy metody suce do wykonywania


SQL-a: 
, 
oraz 
. Wybr
odpowiedniej metody zaley od typu konstrukcji SQL, ktra ma
zosta wykonana.

Wykonywanie konstrukcji DDL


Metoda 
jest najodpowiedniejsza dla polece DDL czy
cakowicie dynamicznych polece SQL. Zwraca ona warto ,
jeeli wykonanie konstrukcji SQL spowodowao wygenerowanie
zbioru wynikowego. Zbir wynikowy mona otrzyma wywoujc
dla obiektu konstrukcji metod ! 
. Jeeli metoda 

zwrci warto " , mona za pomoc metody 
#
obiektu  okreli liczb wierszy objtych dziaaniem konstrukcji DML. Jeli natomiast w trakcie wykonywania
polecenia DDL wystpi bd, zostanie zgoszony wyjtek 
. Oto przykad, w ktrym zostaje utworzona tabela o nazwie
$!%& (przy zaoeniu, e poczenie  istnieje):

Dynamiczne wykonywanie polece SQL

21

   


 
  

   

    




!" !#
   $
%
&'#
(
  $
%
&'#

%    #
 
$
%
)
 

  


  


" 
"
 ' 
   
  
   


Wykonywanie konstrukcji INSERT,


UPDATE oraz DELETE
Metoda 
nadaje si do wykonywania konstrukcji
DML innych ni konstrukcja SELECT i zwraca liczb wierszy
objtych dziaaniem danej konstrukcji SQL. Poniej przedstawiono
przykad, w ktrym do tabeli $!%& utworzonej w poprzednim
przykadzie zostaje wstawiony nowy wiersz (przy zaoeniu, e
poczenie  istnieje):
 (  )
   
 
  


*   +  

 

#

22

JDBC. Leksykon kieszonkowy

   #


(
  #

%  #
 

$  
)#
,-,#
,./,#
0,)12'3')3'),4#
,5,
 

  
"
( ' * 
 

+,-. ( / /01 + 2


+( ( + 2 ( 2 ++ 



  


" 
"
 ' 
   
  
   


Wykonywanie konstrukcji SELECT


Metoda 
zwraca obiekt ! , co wietnie nadaje
si do wykonywania konstrukcji SQL SELECT. Poniej przedstawiono przykad zapytania wykonanego dla tabeli $!%& (przy
zaoeniu, e poczenie  istnieje):
!     
   
 
(  )
  


    6
!
Dynamiczne wykonywanie polece SQL

23

  
#
   #
(
  #

%  #
 

(
 
*%

)
(
 

( 22
% 3    4
* 
 5    
6 
" 5    
7 
    8
9 
    
: 
 

% 3 2 +;+ 2


 5 2 +;+ 2
" 5 2 +;+ 2
 2 +;+ 2
 

  

   
 

  


  


" 
"
  ' 
    
  
   
"
 ' 
   
  
   


Warto zwrci uwag, e w trzech ostatnich przykadach obiekt


 by zawsze zamykany. Zamykanie obiektu 

24

JDBC. Leksykon kieszonkowy

zaraz po tym, gdy przestaje on by potrzebny, zmniejsza zuycie


zasobw zarwno w programie klienta, jak i w bazie danych.

Wykonywanie
prekompilowanych polece SQL
Wykonywanie konstrukcji SQL przy uyciu obiektw $
 moe by bardziej efektywne (z punktu widzenia programu klienta oraz bazy danych) oraz atwiejsze w programowaniu. Obiekt $ mona otrzyma z obiektu #,
wywoujc w nastpujcy sposb jego metod 
:
$    
 
 

   

 

#
   #
(
  #

%  #
 

$  
7#
7#
7#
7#
7


  



Gotowa konstrukcja jest bardziej efektywna, jeeli mona przygotowa j raz, a potem wykorzystywa wiele razy. A atwiejsza
w programowaniu jest dlatego, e w trakcie tworzenia konstrukcji
SQL uwalnia od obowizku tworzenia zoonych konkatenacji

Wykonywanie prekompilowanych polece SQL

25

(skleje) acuchw znakw oraz od koniecznoci uywania odpowiednich metod formatujcych daty. Zamiast tego mona jako
oznaczenia miejsc wystpowania parametrw uy znakw zapytania (<), a nastpnie przed wykonaniem konstrukcji SQL wartoci
tych parametrw ustali programowo.
Poniewa klasa $ jest rozszerzeniem klasy 
, posiada jej wszystkie trzy metody uruchomieniowe. Oprcz
tego posiada take zestaw metod typu ===
, ktre su do
umieszczania w konstrukcji przed jej wykonaniem konkretnych
wartoci w miejscach oznaczonych znakami zapytania sposb
ich stosowania przedstawiono w poniszym przykadzie. Zaoono, e istniej utworzone w poprzednim przykadzie obiekty
poczenia  oraz obiekty gotowej konstrukcji  .
 
  8)#9
   
 9#-
   
 &#./
  -  :#; $ < -  $  ()12'3')3')
   
 =#>

*   +  
  

   
"
( ' * 
 

+,-. ( (0 / /01 + 2


+( ( + 2 ( 2 ++ 



  



Do znacznikw parametrw (<) wystpujcych w konstrukcji SQL


metody odwouj si poczwszy od numeru 1, a potem kolejno
od lewej do prawej. Tak wic w powyszym przykadzie polu 
5 zajmujcemu pierwsz pozycj zostaje przypisana warto

26

JDBC. Leksykon kieszonkowy

liczbowa 2 (typu ), polu  5, zajmujcemu pozycj drug,


zostaje przypisana warto acucha znakw +8%+ itd. Po ustaleniu
wartoci wszystkich parametrw konstrukcja zostaje uruchomiona
poprzez wywoanie metody 
obiektu $
. Poniewa tre konstrukcji SQL zostaa przygotowana
wczeniej, nie jest ona przekazywana jako parametr do adnej
z metod uruchomieniowych obiektu $.

Wykonywanie
procedur osadzonych
Jeeli pobranie lub zachowanie pewnej jednostkowej iloci danych
w programie wymaga wykonania wielu konstrukcji SQL, wykorzystanie procedury osadzonej jest bardziej efektywne ni kolejne
uruchamianie przez klienta wszystkich koniecznych konstrukcji.
Do uruchomienia procedury osadzonej mona uy obiektu #
3. Uzyskuje si go z obiektu #, wywoujc
w nastpujcy sposb metod #
:
#3    
 
 

? 
07  7#74



  



Szczegy dotyczce skadni wywoywania procedur osadzonych opisano w rozdziale Skadnia wyrae przenonych. Klasa
#3 jest rozszerzeniem klasy $, std
w identyczny sposb ustala si dla niej miejsca wystpowania
parametrw za pomoc znakw zapytania (<). Jednak tym
razem parametry te mog by typu wejciowego, wyjciowego

Wykonywanie procedur osadzonych

27

lub wejciowo-wyjciowego. Po przygotowaniu wywoania procedury osadzonej, a przed jej uruchomieniem, naley wykona jeszcze nastpujce czynnoci:
Wszystkie parametry wyjciowe musz zosta zarejestrowane
za pomoc metody   %$
, ktra pobiera
dwa argumenty. Pierwszy z nich jest pozycj odpowiedniego
znacznika parametru (<) w przygotowanym wywoaniu
(1 dla pierwszego znacznika, a nastpnie kolejno od lewej
do prawej). Drugi parametr jest jedn ze staych zdefiniowanych w 0> ?@ oznaczajc typ, co umoliwia sterownikowi rozpoznanie, jaki rodzaj danych jest zwracany przez
procedur osadzon.
Warto kadego parametru wejciowego i wejciowo-wyjciowego musi by ustalona za pomoc jednej z funkcji 
===
odpowiedniej dla typu danych wystpujcych w bazie.
Na przykad:
 
   #

+ <   


<A < + 



 
)#@!  +58?
  - 9#) '
  - &#) '



  



Do uruchomienia procedury osadzonej naley wykorzysta metod 


. Aby pobra warto ktrego z parametrw wyjciowych procedury osadzonej, naley w przedstawiony poniej
sposb uy jednej z metod ===
obiektu #3
odpowiedniej dla danego typu danych SQL:

28

JDBC. Leksykon kieszonkowy

3  (  ))


 
   #
+ <   
<A < + 
   %$
*A @ &B!4# 
  83
6A *) 
  83
7A *) 
   
 *
 - )
  



  


" 
"
  ' 
    
 

   


Otrzymywanie wynikw zapyta


Wyniki wykonania konstrukcji SELECT s zwracane przez metod

w postaci zbioru wynikowego (! ). Obiekt
!  prezentuje zbir wynikowy w postaci tabeli zawierajcej wiersze i kolumny. Moe on by przegldany i modyfikowany,
moe take by wraliwy na zmiany w bazie danych (jeeli sterownik i baza danych oferuj tak moliwo dla zapyta).
Domylnie zbir wynikowy mona przeglda jedynie w przd,
po jednym rekordzie, wartoci w kolumnach nie mona modyfikowa, a sterownik nie jest w stanie wykry zmian zachodzcych w bazie danych. Aby stworzy zbir wynikowy, ktry
mona przeglda, modyfikowa i ktry bdzie wykrywa zmiany w bazie, naley uy alternatywnej wersji jednej z metod #

, 
lub #
obiektu #
. Metody te pobieraj dwa dodatkowe argumenty:

Otrzymywanie wynikw zapyta

29




(staa wspbienoci obiektu ! )


Okrela, czy zbir wynikowy moe by tylko przegldany,
czy moliwe bdzie take dokonywanie za jego pomoc
modyfikacji. Dostpne s dwie wartoci staej tego typu:
#%&#!5!C85%&D
#%&#!5$8C@C,

 


(staa typu obiektu ! )


Okrela, w jaki sposb mona przeglda zbir wynikowy
powstay w efekcie wykonania zapytania oraz ustala, czy
sterownik ma wykrywa zmiany w bazie danych dotyczce rekordw objtych zbiorem wynikowym. Oto dostpne
wartoci tej staej:
@D$5E%!FC!85%&D

Dla zbioru wynikowego przegldanego tylko w przd,


niewraliwego na modyfikacje.
@D$5#!%54&&4@4G

Dla zbioru wynikowego przegldanego dwukierunkowo, niewraliwego na modyfikacje.


@D$5#!%5&4@4G

Dla zbioru wynikowego przegldanego dwukierunkowo, wraliwego na modyfikacje.


Poniej przedstawiono przykad utworzenia zbioru wynikowego,
ktry moe by przegldany, za pomoc ktrego mona modyfikowa rekordy w bazie i ktry jest w stanie wykry zmiany
dokonywane w bazie (przy zaoeniu, e poczenie 
istnieje):
!     
   
 
(  )
 
    

30

JDBC. Leksykon kieszonkowy

   ??++-A@ABC#


   @D ?CC  8@8E
   

+   5A + 2


+  5A + 2
+ " 5A + 2
+ 35A + 2
+  + 2
+" $!%& + 2
+(  5  * + 



  



Przegldanie zbioru wynikowego


Jeeli zbir wynikowy zosta ustalony jako moliwy do przegldania tylko w przd, do przesuwania si co jeden wiersz naley
uywa metody 
. Zazwyczaj ta operacja wykonywana jest
w ptli o na przykad takiej strukturze (przy zaoeniu, e poczenie  istnieje):
!     
   
 
(  )
  

   
+  + 
*% 
   0

4



  



Otrzymywanie wynikw zapyta

31

Jeeli zbir moe by przegldany dwukierunkowo, do ustawiania pozycji kursora mona uywa jednej z nastpujcych metod:
3 
, " 
,  
, 
, >
oraz >
. Niezalenie od tego, czy zbir mona przeglda jedno- czy dwukierunkowo, biec pozycj kursora mona okreli za pomoc jednej z metod:  C" 
,  ,"E 
,  E 
,   
lub
!(
.

Pobieranie wartoci z kolumn


Bez wzgldu na rodzaj zbioru wynikowego, do pobrania wartoci
z okrelonej kolumny suy jedna z metod ===
odpowiednia
dla typu danych SQL przechowywanych w kolumnie. Pierwszym
argumentem metody jest indeks kolumny, ktry jest wzgldn
pozycj kolumny w konstrukcji SQL (1 dla pierwszej, a nastpnie
kolejno od lewej do prawej). Poniej przedstawiono przykad (przy
zaoeniu, e poczenie  istnieje):
  4  )
  &  
 " &  
0> ?8 38  
   
 (  )
!     
   
 
  

   

+   5A + 2


+  5A + 2
+ " 5A + 2
+ 35A + 2
+  + 2
+" $!%& + 2
+(  5  * + 
(
 


32

JDBC. Leksykon kieszonkowy

( 22

8
  8)
   
   
 9
(
  
   
 &

%-  
  -  :
 

   
 =


  

   
 

  


  


" 
"
  ' 
    
  
   
"
 ' 
   
  
   


W powyszym przykadzie zmiennej  4 typu  zostaje


przypisana warto znajdujca si w kolumnie  5 zbioru
wynikowego. Kolumna ta wystpuje w zbiorze wynikowym jako
pierwsza, std w wywoaniu metody 4
podanym indeksem
jest liczba 1. Zmiennej  & typu  przypisana jest warto
z kolumny  5, pobrana ze zbioru wynikowego za pomoc
metody 
, do ktrej jako argument przekazano warto 2.

Wstawianie, modyfikowanie i usuwanie


wierszy za pomoc zbioru wynikowego
Jeeli utworzony zbir wynikowy umoliwia modyfikacj, mona
za jego pomoc wstawia nowe wiersze, modyfikowa wartoci
w istniejcych wierszach, a take usuwa wiersze.
Otrzymywanie wynikw zapyta

33

Wstawienie nowego wiersza do modyfikowalnego zbioru wynikowego wymaga najpierw przeniesienia kursora do roboczego
obszaru zwanego  
  (tam tworzy si nowy wiersz) za
pomoc metody >@4 !(
. Nastpnie, za pomoc metod
z rodziny ===
, naley ustali wartoci w poszczeglnych
kolumnach. Waciwego wstawienia wiersza do tabeli dokonuje
si przy uyciu metody  !(
. Na kocu trzeba z powrotem
ustawi kursor na rekordzie, na ktry wskazywa przed rozpoczciem wstawiania suy do tego metoda >@#!(
.
Aby zmodyfikowa wiersz istniejcy w zbiorze wynikowym,
trzeba najpierw ustawi kursor na danym rekordzie, a nastpnie za pomoc metod ===
wpisa do niego nowe wartoci.
Modyfikacji wiersza w tabeli dokonuje metoda !(
.
Przed usuniciem istniejcego wiersza poprzez zbir wynikowy
trzeba ustawi na wybranym wierszu kursor, a nastpnie wywoa
metod !(
.
Poniszy przykad obrazuje wykonanie tych trzech operacji (przy
zaoeniu, e poczenie  istnieje):
!     
   
 
  

! #%&#!5$8C@C,A
! @D$5#!%5&4@4G 
   

+   5A + 2


+  5A + 2
+ " 5A + 2
+ 35A + 2
+  + 2
+" $!%& + 
HH F ( ( I

  $ @8
*

    8)#&

34

JDBC. Leksykon kieszonkowy


    
 9#-+F/

    
 &#CAD

    :

    =

  
*

  $ @?

*
HH J"/( ( I

   )

    
 9#-+F/

    *
HH  K ( I

   )

     *
  

   
 

  


  


" 
"
  ' 
    
  
   
"
 ' 
   
  
   


Dynamiczne okrelanie
charakterystyki zbioru wynikowego
Do okrelania charakterystyki zbioru wynikowego w trakcie
wykonywania programu suy klasa ! B8. Istnieje
wiele sytuacji, w ktrych moe pojawi si konieczno okrelenia

Otrzymywanie wynikw zapyta

35

cech otrzymanego zbioru. Na przykad, po wykonaniu dynamicznej konstrukcji #@, za pomoc obiektu ! B8 mona
ustali, co tak naprawd ta konstrukcja zwrcia.
Poniej przedstawiono sposb uzyskiwania obiektu ! B
8 dla biecego zbioru wynikowego za pomoc metody 
B8
(przy zaoeniu, e poczenie  istnieje):
   )
!     
   
  5  -  

 
  

   

+   5A + 2


+  5A + 2
+ " 5A + 2
+ 35A + 2
+  + 2
+" $!%& + 2
+(  5  * + 
(
 

( 22
"
(  * 


  5  -  
    ##

"
 L ) 
"
   * M  22 
"
 L * 
 
+;+ 2
  #&
 

  
 

  #&
 


 
++ 

36

JDBC. Leksykon kieszonkowy



"
 L ) 
"
   * M  22 
"
 L * 
 
+;+ 2
  
 

  
 

  
 


 
++ 


  

   
 

  


  



Korzystajc z obiektu ! B8, program najpierw okrela liczb kolumn ujtych w zapytaniu SQL. Nastpnie, podczas
przetwarzania pierwszego wiersza zbioru wynikowego, wypisuje nagwki kolumn, uywajc nazw wystpujcych w bazie
danych. Potem program wywietla kolejno wartoci z poszczeglnych wierszy. Informacje na temat wszystkich moliwoci
obiektu ! B8 znajdziesz w podrozdziale ResultSetMetaData w rozdziale JDBC API.

Otrzymywanie wynikw zapyta

37

You might also like