Você está na página 1de 72

Java and all Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S.

and other countries.


Interface Grfica e Banco de
Dados em Java
Acesso a bancos de dados com JDBC
Agosto 2! Interface "r#fica e $anco de %ados em Java
2
Licena para uso e distribuio
&ste material est# dis'on(vel 'ara uso n)o-
comercial e 'ode ser derivado e*ou distribu(do,
desde +ue utili,ando uma licen-a e+uivalente.
Atribui-)o-Uso .)o-/omercial-
/om'artilhamento 'ela mesma
licen-a, vers)o 2.0
htt'1**creativecommons.org*licenses*by-nc-sa*2.0*deed.'t
2oc3 'ode co'iar, distribuir, e4ibir e e4ecutar a obra, al5m de criar obras
derivadas, sob as seguintes condi-6es1 7a8 voc3 deve dar cr5dito ao autor
original, da forma es'ecificada 'elo autor ou licenciante9 7b8 voc3 n)o 'ode
utili,ar esta obra com finalidades comerciais9 7c8 Se voc3 alterar, transformar, ou
criar outra obra com base nesta, voc3 somente 'oder# distribuir a obra resultante
sob uma licen-a id3ntica a esta.
Agosto 2! Interface "r#fica e $anco de %ados em Java
3
Objetivos desta parte
Introdu,ir conceitos b#sicos de 'ersist3ncia em
bancos de dados relacionais 7$%:s89
A'resentar a linguagem S;< de forma a 'ermitir
a mani'ula-)o sim'les de dados em $%:s9
&4'licar como conectar em $%:s e enviar
comandos S;< em Java com a A=I J%$/9
A'resentar o 'adr)o de 'ro>eto %A? como uma
forma organi,ada de 'ersist3ncia de ob>etos.
Agosto 2! Interface "r#fica e $anco de %ados em Java
4
Armazenamento persistente
A grande maioria das a'lica-6es 'recisa
arma,enar informa-6es em m(dia 'ersistente9
=ersistente @ n)o se a'aga a'As terminado o
'rocesso +ue a criou9
Bi'os de arma,enamento1
Ar+uivos bin#rios 7seriali,a-)o89
Ar+uivos te4to 7e4.1 CM<89
$ancos de dados.
Agosto 2! Interface "r#fica e $anco de %ados em Java
5
Banco de dados
/ole-)o organi,ada de dados9
S"$% D Sistema "erenciador de $anco de %ados1
&m ingl3s, Database Management System 7%$MS89
SoftEare +ue gerencia o arma,enamento e
recu'era-)o de dados em ar+uivos9
=rov3 uma linguagem 'ara mani'ula-)o dos dados9
Usu#rio n)o 'recisa saber como os dados s)o
arma,enados em disco.
Agosto 2! Interface "r#fica e $anco de %ados em Java
6
Paradimas de !GBDs
S"$%s :elacionais 7S"$%:s81
$aseados em #lgebra relacional 7efic#cia
matematicamente 'rovada89
Forte indGstria 'romovendo seu uso.
S"$%s ?rientado a ?b>etos 7S"$%??s81
=aradigma com'at(vel com o desenvolvimento9
IndGstria em crescimento.
S"$%s ?b>eto*:elacional 7S"$%?:s81
:elacional com e4tens6es ??.
Agosto 2! Interface "r#fica e $anco de %ados em Java
7
"oco na tecno#oia re#aciona#
&ste curso foca na tecnologia de bancos de
dados relacionais9
? acesso a S"$%?:s 5 feito de forma
semelhante, adicionando algumas facilidades9
? acesso a bancos ?? 5 muito mais sim'lificado,
visto +ue o 'aradigma 5 o mesmo 7'ersist3ncia
trans'arente89
=ersist3ncia trans'arente 'ode ser alcan-ada
tamb5m com frameworks de ma'eamento
ob>eto*relacional.
Agosto 2! Interface "r#fica e $anco de %ados em Java
8
Abstrao de armazenamento
&m S"$%:s, os dados s)o arma,enados em
tabelas1
/ada tabela re'resenta uma classe de entidades do
sistema9
/ada coluna da tabela re'resenta 'ro'riedades
da+uela classe de entidades9
/ada linha da tabela re'resenta uma entidade
7ob>eto8 e4istente no sistema9
Uma ou mais colunas identificam univocamente cada
linha da tabela 7s)o as chaves 'rim#rias89
:elacionamentos entre tabelas s)o 'oss(veis 'or
trans'osi-)o de chaves.
Agosto 2! Interface "r#fica e $anco de %ados em Java
9
$%emp#o de banco de dados
Id Gravadora Artista Nome Preo Duplo?
1 1 1 Crash R$ 24,90 No
2 2 2 Construo R$ 42,90 No
3 1 1 Under the Table and Dreamin R$ 2!,90 No
4 3 3 "#si$a %ara &$am%amentos R$ 4',00 (im
/%1
Nome
1
2
3 )"*
Id
(on+ "usi$
Uni,ersal "usi$
"ravadora1
Nome Banda?
1 (im
2 No
3 -eio Urbana (im
Id
Da,e "atthe.s /and
Chi$o /uar0ue
Artista1
Agosto 2! Interface "r#fica e $anco de %ados em Java
10
Linuaem de manipu#ao de dados
Um S"$% 'rov3 tr3s linguagens 'ara
mani'ula-)o de dados1
%%< 7Data Definition Language81 linguagem 'ara
defini-)o dos dados D define a estrutura do banco9
%M< 7Data Manipulation Language81 linguagem de
mani'ula-)o de dados D 'ermite inserir, atuali,ar,
recu'erar e e4cluir dados do banco9
%/< 7Data Control Language81 linguagem de controle
de dados D controla as'ectos de autori,a-)o.
A grande maioria dos S"$%:s atuais utili,a a
linguagem S;< 'ara tudo isso.
Agosto 2! Interface "r#fica e $anco de %ados em Java
11
!&L ' Structured Query Language
/riada 'ela I$M, 'adroni,ada 'ela A.SI em
HIJ!, IS? em HIJK, revis6es em I2, II e 2L9
=ermite e4tens6es 'ro'riet#rias9
=rov3 comandos de %%<, %M< e %/< 'ara bancos
de dados relacionais9
A'esar do nome ser M<inguagem &struturada de
/onsultaN, 'ermite todo o ti'o de mani'ula-)o.
Fortemente baseada em #lgebra relacional9
F#cil de escrever e entender 7'rinci'almente
'ara +uem fala ingl3s8.
Agosto 2! Interface "r#fica e $anco de %ados em Java
12
!GBDs (ue usam !&L
A'ache %erby9
/ach59
%$29
Ingres9
Inter$ase9
MyS;<9
?racle9
=ostgreS;<9
Microsoft S;< Server9
S;<ite9
Sybase9
Informi49
Firebird9
OS;<%$9
=oint$ase.
Fonte1 Piki'edia
Agosto 2! Interface "r#fica e $anco de %ados em Java
13
!&L )*)
2eremos conceitos b#sicos de bancos de dados
relacionais com S;<9
&4'erimentaremos a'enas o suficiente 'ara
arma,enamento*recu'era-)o sim'les de dados9
Usaremos o banco de dados OS;<%$
7EEE.hs+ldb.org81
$anco de dados totalmente feito em Java9
.)o 5 robusto, 'or5m 5 'e+ueno 7JA: de !2Q R$8,
ideal 'ara a'lica-6es deskto'.
Agosto 2! Interface "r#fica e $anco de %ados em Java
14
Iniciando o +!&LDB
? OS;<%$ 'ode funcionar em diversos modos1
Servidor 7'rotocolo de comunica-)o 'ro'riet#rio89
Servidor Web 7OBB=89
Servlet 7OBB=89
Standalone * In-Process 7acesso direto89
Somente memAria 7acesso direto8.
=ara iniciar o OS;<1
Servidor1 java -cp hsqldb.jar org.hsqldb.Server
Peb1 java -cp hsqldb.jar org.hsqldb.WebServer
Standalone ou memAria1 basta usar o driver.
Agosto 2! Interface "r#fica e $anco de %ados em Java
15
Ar(uivos de confiurao
A configura-)o do OS;<%$ em modo servidor e
Web 'ode ser 'assada como argumento ou em
ar+uivos de configura-)o9
server.properties1
webserver.properties1
server.database.0=file:javadiscos
server.dbname.0=javadiscos
server.port=8090
server.database.0=file:javadiscos
server.dbname.0=javadiscos
Agosto 2! Interface "r#fica e $anco de %ados em Java
16
"erramenta de erenciamento
? OS;<%$ 'ossui uma ferramenta de
gerenciamento bastante rudimentar9
=ara inici#-la1
java -cp hsqldb.jar
org.hsqldb.til.!atabase"anager
Agosto 2! Interface "r#fica e $anco de %ados em Java
17
,onectando ao +!&LDB
Servidor normal1
Bi'o1 #S$% !atabase &ngine Server9
U:<1
jdbc:hsqldb:hsql:''localhost'javadiscos.
Servidor Web1
Bi'o1 #S$% !atabase &ngine Web Server9
U:<1
jdbc:hsqldb:http:''localhost:8090'javadiscos.
Agosto 2! Interface "r#fica e $anco de %ados em Java
18
,riao do banco de dados
=ara criar as tabelas, utili,amos comandos de
linguagem de defini-)o de dados da S;<9
()&*+& !*+*,*S&9
()&*+& +*,%&9
*%+&) +*,%&9
!)-. +*,%&.
S mais f#cil se utili,armos uma ferramenta de
'ro>eto de banco de dados1
%$%esigner, &:Pin, "lom, =O=MyAdmin, ferramentas
'ro'riet#rias do 'rA'rio S"$%, etc.
O# v#rias em Java1 htt'1**EEE.>ava-source.net*o'en-source*s+l-clients
Agosto 2! Interface "r#fica e $anco de %ados em Java
19
-ode#aem das tabe#as
Babelas re'resentam entidades do dom(nio9
&m sistemas ??, s)o as classes de negAcio1
/ada atributo 5 uma coluna da tabela9
%efine-se a chave-'rim#ria 7=R89
:elacionamentos s)o feitos 'or trans'osi-)o de =R.
%efini-)o da chave-'rim#ria1
/on>unto de atributos +ue identificam um ob>eto
univocamente 7/=F 'ara 'essoa, IS$. 'ara livro, ...89
/ria-)o de um atributo es'ec(fico 'ara a =R
7recomendado8.
Agosto 2! Interface "r#fica e $anco de %ados em Java
20
!istema e%emp#o. Java Discos
Usaremos uma lo>a de /%s como e4em'lo1
Agosto 2! Interface "r#fica e $anco de %ados em Java
21
O banco de dados da Java Discos
Ma'eamento de classes 'ara tabelas1
Agosto 2! Interface "r#fica e $anco de %ados em Java
22
O banco de dados da Java Discos
()&*+& +*,%& /ravadora 0
id ,1/12+ 2-+ 23%% 1!&2+1+45
nome 6*)(#*)07008 2-+ 23%%5
.)1"*)4 9&40id8
8:
()&*+& +*,%& 6enda 0
id ,1/12+ 2-+ 23%% 1!&2+1+45
data6enda !*+&+1"& 23%%5
.)1"*)4 9&40id8
8:
()&*+& +*,%& *rtista 0
id ,1/12+ 2-+ 23%% 1!&2+1+45
nome 6*)(#*)07008 2-+ 23%%5
banda ,1+ 23%%5
pais 6*)(#*)0;08 2-+ 23%%5
.)1"*)4 9&40id8
8:
Agosto 2! Interface "r#fica e $anco de %ados em Java
23
O banco de dados da Java Discos
()&*+& +*,%& (! 0
id ,1/12+ 2-+ 23%% 1!&2+1+45
id/ravadora ,1/12+5
id*rtista ,1/12+ 2-+ 23%%5
nome 6*)(#*)07008 2-+ 23%%5
fai<as %-2/6*)(#*) 23%%5
preco =%-*+ 2-+ 23%%5
foto ,12*)4 23%%5
dplo ,1+ 23%%5
.)1"*)4 9&40id85
=-)&1/2 9&40id*rtista8
)&=&)&2(&S *rtista0id8
-2 !&%&+& 2- *(+1-2
-2 3.!*+& 2- *(+1-2
8:
Agosto 2! Interface "r#fica e $anco de %ados em Java
24
O banco de dados da Java Discos
()&*+& +*,%& 1tem6enda 0
id6enda ,1/12+ 2-+ 23%%5
id(! ,1/12+ 2-+ 23%%5
.)1"*)4 9&40id6enda5 id(!85
=-)&1/2 9&40id6enda8
)&=&)&2(&S 6enda0id8
-2 !&%&+& 2- *(+1-2
-2 3.!*+& 2- *(+1-25
=-)&1/2 9&40id(!8
)&=&)&2(&S (!0id8
-2 !&%&+& 2- *(+1-2
-2 3.!*+& 2- *(+1-2
8:
Agosto 2! Interface "r#fica e $anco de %ados em Java
25
Insero de dados
/omando S;< I.S&:B1
?nde1
tabela @ nome da tabela na +ual ser)o inseridos os
dados9
coluna @ nome de uma das colunas da tabela9
e4'ress)o @ valor a ser inserido na coluna
es'ecificada.
12S&)+ 12+- tabela >0colna >5 ...?8?
6*%3&S 0e<press@o >5 ...?8:
Obs.: SQL no case sensitive (no die!encia
"ai#sc$%as de "in#sc$%as&.
Agosto 2! Interface "r#fica e $anco de %ados em Java
26
$%press/es
Formato de'ende do ti'o1
.Gmero inteiro1 0, 700, -;09
.Gmero real1 0.;, -A.9, B9.909
$ooleano1 7, +)3&, 0, =*%S&9
String1 C*bcC, CC, C(om CCaspasCC simplesC9
%ata1 CB00D-70-0EC, C7987-0D-7;C9
Oora1 C78:A9:00C, C0E:7;:7DC.
Agosto 2! Interface "r#fica e $anco de %ados em Java
27
$%perimente.
-- 1nsere as gravadoras SonF5 3niversal e &"1:
12S&)+ 12+- /ravadora 0nome8 6*%3&S 0CSonF "sicC8:
12S&)+ 12+- /ravadora 0nome8 6*%3&S 0C3niversalC8:
12S&)+ 12+- /ravadora 0nome8 6*%3&S 0C&"1C8:
-- 1nsere !ave "atthews5 (hico ,arqe e %egi@o:
12S&)+ 12+- *rtista 0nome5 banda5 pais8
6*%3&S 0C!ave "atthews ,andC5 +)3&5 C&3*C8:
12S&)+ 12+- *rtista 0nome5 banda5 pais8
6*%3&S 0C(hico ,arqeC5 =*%S&5 C,rasilC8:
12S&)+ 12+- *rtista 0nome5 banda5 pais8
6*%3&S 0C%egi@o 3rbanaC5 +)3&5 C,rasilC8:
-- 1nsere G(rashH5 da !",5 por )I B7.905 n@o dplo:
12S&)+ 12+- (! 0id/ravadora5 id*rtista5 nome5 preco5
dplo8 6*%3&S 005 05 C(rashC5 B7.905 =*%S&8:
Agosto 2! Interface "r#fica e $anco de %ados em Java
28
0ecuperao de dados
/omando S;< S&<&/B sim'les1
?nde1
colunas @ nomes das colunas cu>os dados ser)o
recu'erados, se'arados 'or v(rgulas9
tabela @ nome da tabela da +ual ser)o recu'erados
os dados.
S&%&(+ colnas =)-" tabela:
'ode"os $ti%i(a! * )a!a !e)!esenta!
todas as co%$nas.
Agosto 2! Interface "r#fica e $anco de %ados em Java
29
$%perimente.
-- -btJm todos os dados de todas as gravadoras.
S&%&(+ K =)-" /ravadora:
-- -btJm o nome e o paLs de todos os artistas'bandas.
S&%&(+ nome5 pais =)-" *rtista:
-- -btJm o nome e o preMo de todos os (!s.
S&%&(+ nome5 preco =)-" (!:
:es'onda Ts 'erguntas1
;ual 5 o cAdigo da gravadora Sony MusicU
;uais /%s foram gravados 'ela Sony MusicU
;uais /%s do /hico $uar+ue s)o vendidos 'ela Java
%iscosU
Agosto 2! Interface "r#fica e $anco de %ados em Java
30
,rit1rios de se#eo
/l#usula PO&:&1
?nde1
condi-)o @ e4'ress)o lAgica 7resulta em verdadeiro
ou falso8.
S&%&(+ colnas =)-" tabela
W#&)& condiM@o:
Agosto 2! Interface "r#fica e $anco de %ados em Java
31
Operadores 2 constantes
<Agicos1 2-+, -), *2!9
:elacionais1 =, N, N=, O, O=, NO, P=9
String1
%19& Cpadr@oC9
Uso de coringas1 Q ou R.
?utros1
1S 23%%, 1S 2-+ 23%%9
,&+W&&2 < *2! F9
12 0<75 <B5 ...5 <n8.
Agosto 2! Interface "r#fica e $anco de %ados em Java
32
$%perimente.
-- /ravadora com chave-primSria = 0.
S&%&(+ K =)-" /ravadora W#&)& id = 0:
-- *rtistas cjo nome termina com a letra e.
S&%&(+ K =)-" *rtista W#&)& nome %19& CQeC:
-- (!s qe cstam entre )I B0500 e )I T0500.
S&%&(+ K =)-" (! W#&)& preco ,&+W&&2 B0 *2! T0:
:es'onda Ts 'erguntas1
;uais os /%s de /hico $uar+ue e Marisa MonteU
;uais /%s custam menos de :V 20,U
;uais /%s foram feitos de forma inde'endente 7sem
gravadora8U
Agosto 2! Interface "r#fica e $anco de %ados em Java
33
Ordenao de resu#tados
/l#usula ?:%&: $W1
?nde1
colunas @ nomes das colunas usadas na ordena-)o e
o crit5rio 7*S( @ ascendente, !&S( @ descendente8.
S&%&(+ colnas =)-" tabela
W#&)& condiM@o
-)!&) ,4 colnas:
Agosto 2! Interface "r#fica e $anco de %ados em Java
34
$%perimente.
-- (!s em ordem crescente de nome.
S&%&(+ K =)-" (! -)!&) ,4 nome *S(:
-- (!s em ordem decrescente de nome.
S&%&(+ K =)-" (! -)!&) ,4 nome !&S(:
-- *rtistas em ordem crescente de paLs5 depois nome.
S&%&(+ K =)-" *rtista -)!&) ,4 pais5 nome:
Bente ordenar1
$andas em ordem crescente de nome, de'ois artistas
em ordem crescente de nome9
/%s 'or 're-o 7ascendente e descendente8.
Agosto 2! Interface "r#fica e $anco de %ados em Java
35
Juno de tabe#as
%ados de entidades diferentes ficam em tabelas
diferentes 'ara evitar redundXncia9
Muitas ve,es gostar(amos de recu'erar dados de
diversas tabelas ao mesmo tem'o9
=recisamos fa,er >un-)o de tabelas, utili,ando as
chaves-'rim#rias trans'ostas9
;uando houver conflito dos nomes das colunas,
devemos usar o nome +ualificado1
+abela.colna
Agosto 2! Interface "r#fica e $anco de %ados em Java
36
Juno de tabe#as
Jun-)o com PO&:&1
&4'erimente1
Bente >untar tamb5m a tabela "ravadora 'ara
mostrar a gravadora dos /%s.
S&%&(+ colnas =)-" +75 +B
W#&)& +7.id = +B.id+7:
-- 2ome5 preMo e artista dos (!.
S&%&(+ (!.nome5 preco5 *rtista.nome
=)-" (!5 *rtista
W#&)& (!.id*rtista = *rtista.id:
Agosto 2! Interface "r#fica e $anco de %ados em Java
37
Juno de tabe#as
Jun-)o com I..&: J?I.1
&4'erimente1
Bente >untar tamb5m a tabela "ravadora 'ara
mostrar a gravadora dos /%s.
S&%&(+ colnas =)-" +7 122&) U-12 +B
-2 +7.id = +B.id+7:
-- 2ome5 preMo e artista dos (!.
S&%&(+ (!.nome5 preco5 *rtista.nome
=)-" (! 122&) U-12 *rtista
-2 (!.id*rtista = *rtista.id:
Agosto 2! Interface "r#fica e $anco de %ados em Java
38
0enomeando tabe#as e co#unas
=ara sim'lificar nossas consultas, 'odemos criar
aliases 'ara tabelas ou colunas1
-- 2ome5 preMo e artista dos (!.
S&%&(+ (!.nome5 preco5 *.nome *S artista
=)-" (! 122&) U-12 *rtista *S *
-2 (!.id*rtista = *.id:
-- .odemos omitir o G*SH.
S&%&(+ (!.nome5 preco5 *.nome artista
=)-" (! 122&) U-12 *rtista *
-2 (!.id*rtista = *.id:
Agosto 2! Interface "r#fica e $anco de %ados em Java
39
"un/es 3teis do +!&LDB
*,S0nm81 valor absoluto9
*6/0colna81 m5dia dos valores9
S3"0colna81 soma dos valores9
(&1%12/0nm8, =%--)0nm81 teto e 'iso9
(-2(*+0str75 strB81 concatena-)o9
%&2/+#0str81 tamanho da string9
(3))&2+R!*+&1 data atual9
!*4-="-2+#0data81 dia do m3s9
%entre muitas outras...
Agosto 2! Interface "r#fica e $anco de %ados em Java
40
Atua#izao de dados
/omando S;< U=%AB&1
&4'erimente1
Bente dar HY de desconto em todos os /%s da
%ave MattheEs $andZ
3.!*+& tabela S&+
col7 = e<pr75 colB = e<prB5 ...
W#&)& condiM@o:
-- *ltera o nome de C(! !emoC para C!emo (!C.
3.!*+& (! S&+ nome = C!emo (!C
W#&)& id = A:
Agosto 2! Interface "r#fica e $anco de %ados em Java
41
$%c#uso de dados
/omando S;< %&<&B&1
&4'erimente1
Bente a'agar os /%s gravados 'ela Universal e
&MI 7dica1 use o o'erador ?: ou I.8.
!&%&+& =)-" tabela
W#&)& condiM@o:
-- *paga os (!s com preMos abai<o de )I B0500.
!&%&+& =)-" (!
W#&)& preco N B0.0:
Agosto 2! Interface "r#fica e $anco de %ados em Java
42
0ecapitu#ando444
$ancos de dados relacionais s)o o 'adr)o do
mercado9
A linguagem de defini-)o e mani'ula-)o de
dados 'adr)o 5 a S;<9
A'rendemos os seguintes as'ectos da S;<1
/riar as tabelas9
Inserir e atuali,ar dados9
/onsultar dados 7com crit5rio, com ordena-)o89
&4cluir dados.
=rosseguindo1 onde Java entra na histAriaU
Agosto 2! Interface "r#fica e $anco de %ados em Java
43
Java Database ,onectivit5
J%$/ 5 a A=I 'adr)o da 'lataforma Java 'ara
acesso a bases de dados9
"eralmente usada 'ara bancos de dados relacionais.
? J%R e a J:& da Sun im'lementam o b#sico,
voltado 'ara a'lica-6es desktop1
=acote java.sql9
=acote java<.sql e sub'acotes.
Agosto 2! Interface "r#fica e $anco de %ados em Java
44
Insta#ao
=ara 'rogramar em Java com acesso a bancos de
dados 5 'reciso1
Instalar o kit de desenvolvimento Java
7o'cionalmente, uma I%&89
Instalar o S"$% de sua 'refer3ncia9
?bter o driver J%$/ do seu S"$%.
Agosto 2! Interface "r#fica e $anco de %ados em Java
45
6so
=ara consultas 7S&<&/B8, s)o 0 'assos1
H[8 ?btenha uma cone4)o a 'artir do driver9
2[8 /rie um statement a 'artir da cone4)o9
L[8 &nvie uma consulta S;< 'or meio do statement9
Q[8 Mani'ule o con>unto de resultados da consulta9
0[8 Feche o statement e a cone4)o.
=ara outros comandos, 'ule o 'asso Q.
Agosto 2! Interface "r#fica e $anco de %ados em Java
46
O driver JDB,
/ada $% 'ossui um 'rotocolo diferente de
comunica-)o1
A A=I J%$/ define somente as interfaces 'ara
cone4)o com o banco9
? driver do fornecedor im'lementa o acesso.
Bi'os de driver1
Bi'o H1 'onte J%$/-?%$/ 7Microsoft89
Bi'o 21 drivers 'ara A=I nativa 7J.I89
Bi'o L1 clientes 'ara servidores de dados Java9
Bi'o Q1 cone4)o direta ao banco, im'lementada em
Java 'uro.
Agosto 2! Interface "r#fica e $anco de %ados em Java
47
Passo ). obtendo uma cone%o
Usaremos a classe java.sql.!river"anager9
?bteremos uma java.sql.(onnection9
=r5-re+uisitos1
S"$% instalado e funcionando9
$anco de dados criado9
Ber um login*senha com 'ermiss)o de acesso9
&star com o driver J%$/ no /<ASS=ABO9
Saber a U:< de cone4)o com o banco 7consulte a
documenta-)o do driver8.
Agosto 2! Interface "r#fica e $anco de %ados em Java
48
Passo ). obtendo uma cone%o
(onnection conn = nll:
'' 3)% de cone<@o com o banco de dados.
String rl=Vjdbc:hsqldb:hsql:''localhost'javadiscosV:
'' (arrega o driver do #S$%!, e conecta.
(lass.for2ame0Vorg.hsqldb.jdbc!riverV8:
conn = !river"anager.get(onnection0rl5 VsaV5 VV8:
=rocedimento1
/arregar o driver1 (lass.for2ame0nome89
/onectar1 !river"anager.get(onnection0rl5
login5 senha8.
Agosto 2! Interface "r#fica e $anco de %ados em Java
49
Passo 7. criao do statement
? statement 5 um ob>eto +ue 'ermite a
e4ecu-)o de S;< no banco de dados9
=ara obt3-lo, usaremos o m5todo
createStatement08 do ob>eto (onnection9
:etorna java.sql.Statement.
'' (ria o statement.
Statement stmt = conn.createStatement08:
Agosto 2! Interface "r#fica e $anco de %ados em Java
50
Passo 8. e%ecuo da !&L
A classe Statement 'ossui dois m5todos
'rinci'ais 'ara e4ecu-)o de comandos S;<1
e<ecte3pdate0sql81 retorna o nGmero de linhas
afetadas 'elo comando9
e<ecte$erF0sql81 retorna os dados de uma
consulta 7S;< S&<&/B8.
'' "onta o comando S$%.
String sql = V12S&)+ 12+- /ravadora 0nome8 6*%3&S
0CUava )ecordsC8:V:
'' &<ecta o comando no banco de dados.
stmt.e<ecte3pdate0sql8:
Agosto 2! Interface "r#fica e $anco de %ados em Java
51
Passo 9. obtendo dados de consu#tas
? m5todo e<ecte$erF08 retorna um ob>eto
+ue im'lementa java.sql.)esltSet9
? result set 7con>unto de resultados8 funciona
como um iterador 'elas linhas retornadas1
&le come-a A.B&S da 'rimeira linha9
? m5todo ne<t08 movimenta 'ara a 'rA4ima linha
ou retorna false se n)o h# mais linhas9
?s m5todos getString08, get1nt08, get!ate08,
get,oolean08, etc. retornam os dados9
Bais m5todos 'odem receber o nome da coluna ou
seu (ndice 7come-ando 'or H8.
Agosto 2! Interface "r#fica e $anco de %ados em Java
52
Passo 9. obtendo dados de consu#tas
'' "onta a conslta S$%.
String sql = VS&%&(+ (!.nome5 preco5 *.nome *S V W
Vartista5 /.nome *S gravadora =)-" (! V W
V122&) U-12 *rtista * -2 (!.id*rtista = *.id V W
V122&) U-12 /ravadora / -2 (!.id/ravadora = /.id:V:
'' &<ecta o comando no banco de dados.
)esltSet rset = stmt.e<ecte$erF0sql8:
'' 2avega pelos resltados.
while 0rset.ne<t088 X
String nome = rset.getString0VnomeV8:
doble preco = rset.get!oble0VprecoV8:
String artista = rset.getString0VartistaV8:
String gravadora = rset.getString0VgravadoraV8:
SFstem.ot.println0nome W V ' V W preco W V ' V W
artista W V ' V W gravadora8:
Y
Agosto 2! Interface "r#fica e $anco de %ados em Java
53
Passo 9. obtendo dados de consu#tas
'' "onta a conslta S$%.
String sql = VS&%&(+ (!.nome5 preco5 *.nome *S V W
Vartista5 /.nome *S gravadora =)-" (! V W
V122&) U-12 *rtista * -2 (!.id*rtista = *.id V W
V122&) U-12 /ravadora / -2 (!.id/ravadora = /.id:V:
'' &<ecta o comando no banco de dados.
)esltSet rset = stmt.e<ecte$erF0sql8:
'' 2avega pelos resltados.
while 0rset.ne<t088 X
String nome = rset.getString078: '' &qivalenteP
doble preco = rset.get!oble0B8:
String artista = rset.getString0T8:
String gravadora = rset.getString0A8:
SFstem.ot.println0nome W V ' V W preco W V ' V W
artista W V ' V W gravadora8:
Y
Agosto 2! Interface "r#fica e $anco de %ados em Java
54
Passo :. fec;ando
Sem're feche o statement e a cone4)o, 'ara n)o
ocu'ar recursos do sistema.
.)o 5 'reciso fechar o result set. &le 5 fechado
automaticamente 'elo statement9
SA 'ode haver um result set 'or statement. =ara
efetuar outra consulta, crie outro statement.
'' =echa o statement e a cone<@o.
stmt.close08:
conn.close08:
Agosto 2! Interface "r#fica e $anco de %ados em Java
55
$%perimente<
/rie um 'rograma +ue im'rima o nome de todos
os /%s de bandas americanas9
/rie um 'rograma +ue calcule +uanto custa
com'rar todos os /%s de cantores 7n)o inclua
bandas8 brasileiros9
/rie um 'rograma +ue receba como 'arXmetros
nome e 're-o do /%, nome do artista e nome da
gravadora e cadastre o /% no banco de dados 7o
artista e a gravadora devem e4istir8.
Agosto 2! Interface "r#fica e $anco de %ados em Java
56
6so avanado
Alguns recursos avan-ados do J%$/1
Prepared statements9
Meta-dados do con>unto de resultados9
Bi'os de cursores e concorr3ncia do result set9
/on>unto de resultados naveg#vel9
Uso de stored procedures9
A interface )owSet9
Bransa-6es.
Agosto 2! Interface "r#fica e $anco de %ados em Java
57
Prepared statements
Interface .reparedStatement, estende
Statement9
=r5-com'ila a S;<, agili,ando sua e4ecu-)o9
\til 'ara comandos e4ecutados re'etidas ve,es9
Uso1
stmt = conn.preparedStatement0sql89
setString0id<5 str8, set1nt0id<5 nm8, etc.9
stmt.e<ecte3pdate08.
Agosto 2! Interface "r#fica e $anco de %ados em Java
58
Prepared statements
'' (ria o statement.
.reparedStatement stmt = conn.prepareStatement0V12S&)+ V W
V12+- *rtista 0nome5 banda5 pais8 6*%3&S 0Z5 Z5 Z8:V8:
'' "onta o vetor de dados.
-bject>?>? dados = new -bject>?>? X
XVUamiroqaiV5 ,oolean.+)3&5 V1nglaterraVY5
XV2orah UonesV5 ,oolean.=*%S&5 V&3*VY5
XV2irvanaV5 ,oolean.+)3&5 V&3*VY
Y:
'' 1nsere todos os dados no banco.
for 0int i = 0: i N dados.length: iWW8 X
stmt.setString075 0String8dados>i?>0?8:
boolean banda = 00,oolean8dados>i?>7?8.boolean6ale08:
stmt.set,oolean0B5 banda8:
stmt.setString0T5 0String8dados>i?>B?8:
int qtd = stmt.e<ecte3pdate08:
SFstem.ot.println0qtd W V linha0s8 afetada0s8V8:
Y
Agosto 2! Interface "r#fica e $anco de %ados em Java
59
-eta=dados do result set
Ao reali,ar uma consulta, 5 'oss(vel obter meta-
dados sobre a mesma1
.Gmero de colunas retornadas9
.omes das colunas retornadas9
Bi'o de dado 7classe Java8 de cada coluna9
&tc.
Uso1
M5todo get"eta!ata08 de )esltSet9
?b>eto da classe )esltSet"eta!ata.
Agosto 2! Interface "r#fica e $anco de %ados em Java
60
-eta=dados do result set
'' -btJm meta-dados.
)esltSet"eta!ata meta = rset.get"eta!ata08:
int col(ont = meta.get(olmn(ont08:
int>? spacing = new int>col(ont?:
'' 1mprime m cabeMalho para os resltados.
for 0int i = 0: i N col(ont: iWW8 X
SFstem.ot.print0C[C8:
String col2ame = meta.get(olmn2ame0i W 78:
spacing>i? = meta.get(olmn!isplaFSi\e0i W 78:
SFstem.ot.print0col2ame8:
for 0int j = col2ame.length08 W 7: j N spacing>i?:
jWW8 SFstem.ot.print0C C8:
Y
SFstem.ot.println08:
Agosto 2! Interface "r#fica e $anco de %ados em Java
61
>ipos de cursores
Um result set utili,a um cursor interno +ue
navega 'elos resultados9
&4istem ti'os diferentes de cursores,
re'resentados 'or constantes de )esltSet1
+4.&R=-)W*)!R-2%41 sA navega 'ara frente9
+4.&RS()-%%R12S&2S1+16&1 navega em +ual+uer
dire-)o9
+4.&RS()-%%RS&2S1+16&1 navega em +ual+uer
dire-)o e atuali,a os dados se houver altera-)o.
Agosto 2! Interface "r#fica e $anco de %ados em Java
62
-odo de concorr?ncia do result set
?utras constantes de )esltSet1
(-2(3)R)&*!R-2%41 n)o 'ode ser atuali,ado9
(-2(3)R3.!*+*,%&1 altera-6es no con>unto
refletem no banco de dados.
Ao criar o statement, 'odemos es'ecificar o ti'o
do cursor e o modo de concorr3ncia1
'' Statement qe obtJm reslt sets qe navegam em
'' qalqer direM@o e podem ser atali\ados.
stmt = conn.createStatement0
)esltSet.+4.&RS()-%%RS&2S1+16&5
)esltSet.(-2(3)R3.!*+*,%&
8:
Agosto 2! Interface "r#fica e $anco de %ados em Java
63
,onjunto de resu#tados naveve#
/onfigurando o result set como +4.&RS()-%%,
'odemos navegar em +ual+uer dire-)o1
ne<t081 'rA4ima linha9
previos081 linha anterior9
absolte0linha81 linha es'ec(fica9
first081 'rimeira linha9
last081 Gltima linha9
get)ow081 nGmero da linha.
Agosto 2! Interface "r#fica e $anco de %ados em Java
64
Desafio<
/onstrua uma "UI 'ara consultas S;<1
Im'lemente um BableModel +ue res'onda aos
m5todos usando um result set e seus meta-dados.
Agosto 2! Interface "r#fica e $anco de %ados em Java
65
6so de stored procedures
S)o 'rocedimentos arma,enados no banco de
dados e e4ecutados a 'artir de uma chamada9
Use o m5todo prepare(all0nome8 da classe
(onnection9
:etorno 5 ob>eto +ue im'lementa
java.sql.(allableStatement9
(allableStatement estende
.reparedStatement.
Agosto 2! Interface "r#fica e $anco de %ados em Java
66
A interface RowSet
/riada no Java H.Q e melhorada no Java 0.,
facilita a cone4)o e consultas em $%s9
%ois ti'os 'rinci'ais1
Udbc)owSet1 result set automaticamente rol#vel e
atuali,#vel9
(ached)owSet1 result set desconectado D l3 os
dados do banco, desconecta e arma,ena em cache.
)owSet com cache1
=ode ser seriali,ado 7enviado 'ela redeZ89
Bem limite de +uantidade 7limite da memAria8.
Agosto 2! Interface "r#fica e $anco de %ados em Java
67
A interface RowSet
'' (ria e e<ecta o )owSet.
Udbc)owSet rowSet = new Udbc)owSet1mpl08:
rowSet.set3rl0(onfig.,!R3)%8:
rowSet.set3sername0(onfig.,!R%-/128:
rowSet.set.assword0(onfig.,!RS&2#*8:
rowSet.set(ommand0sql8:
rowSet.e<ecte08:
'' 2avega pelos resltados.
while 0rowSet.ne<t088 X
'K 1gal ao )esltSet... K'
Y
Agosto 2! Interface "r#fica e $anco de %ados em Java
68
>ransa/es
J%$/ funciona 'or 'adr)o com commit
autom#tico de transa-6es9
=ara desabilitar, use set*to(ommit0false8
no ob>eto (onnection9
Bransa-6es s)o iniciadas automaticamente. =ara
confirmar, use commit08 em (onnection9
=ara cancelar, use rollbac]089
? seu S"$% e seu driver devem ter su'orte T
transa-6es 'ara funcionar.
Agosto 2! Interface "r#fica e $anco de %ados em Java
69
0ecapitu#ando444
2imos muitos conceitos sobre J%$/1
? b#sico 7drivers, cone4)o, statement, result set, ...89
Meta-dados9
Bi'os de navega-)o e concorr3ncia do result set9
Prepared statement e stored procedures9
Facilitando o acesso com :oESet.
=rosseguindo...
/omo utili,ar J%$/ de forma organi,adaU
/omo reali,ar a 'ersist3ncia dos meus ob>etos de
negAcioU
Agosto 2! Interface "r#fica e $anco de %ados em Java
70
O padro de projeto DAO
%elega-se a uma classe se'arada a tarefa de
'ersist3ncia de uma classe de negAcio9
=ara cada classe de dom(nio h#1
Uma interface +ue define as o'era-6es do %A? 'ara
a+uela classe9
Uma im'lementa-)o 'ara cada tecnologia de
'ersist3ncia 7J%$/, Oibernate, etc.8.
=ode ser combinado com o 'adr)o de 'ro>eto
F#brica 'ara desaco'lar a tecnologia.
Fonte1 htt'1**>ava.sun.com*blue'rints*core>2ee'atterns*=atterns*%ataAccess?b>ect.html
Agosto 2! Interface "r#fica e $anco de %ados em Java
71
$%emp#o
Agosto 2! Interface "r#fica e $anco de %ados em Java
72
,onc#us/es
2imos nesta 'arte do curso1
/onceitos b#sicos de S"$%:s e S;<9
/one4)o a banco de dados em Java com J%$/9
? 'adr)o de 'ro>eto %A?.
=rA4imos 'assos1
/onhecer os frameworks de ma'eamento
ob>eto*relacional 7?:M8 D ainda neste curso9
A'render mais sobre S;< e S"$%:s9
Investigar a tecnologia de bancos de dados orientada
a ob>etos.

Você também pode gostar