Você está na página 1de 13

ACESSO BASE DE DADOS ATRAVS DE

ODBC E JDBC
Este captulo sobre programao de acesso bases de dados. O objetivo principal
explicar como se programa o acesso bases de dados, utilizando S! atravs da
linguagem "ava.
#o passado, nos de$rontamos com uma dezena de produtos para bases de dados
disponveis, e cada um $alando para nossas aplica%es em sua pr&pria linguagem. Se sua
aplicao necessitasse $alar a uma nova base de dados, voc' teria de ensin()la *e a si
pr&prio+ essa nova linguagem. ,or causa da con$uso causada pela proli$erao de -,.s
nativas de acesso s bases de dados propriet(rias, surgiu a idia de uma -,. de acesso
universal s bases de dados.
A CLI SAG
- /uesto de se ter /ue aprender v(rias linguagens de -,.s de diversos $ornecedores $oi
resolvido atravs da criao de uma linguagem padro 0nica de acesso. -ssim,
1istoricamente, a comunidade da (rea de bancos de dados $ormou um cons&rcio, c1amado
S-2 *Standard uer3 !anguage Access Group+ constitudo por v(rios $ornecedores, para
prover um padro uni$icado de linguagem para acesso base de dados remotas. -ssim,
nasceu S! 4!. *Standard uer3 !anguage 4all !evel .nter$ace+ de$inido pelo S-2.
5oc' deve notar /ue uma 4!. no uma nova linguagem de consulta. Ela , simplesmente,
uma inter$ace procedural para S!. Suas aplica%es usam 4!. para submeter statements
S! para um sistema gerenciador de base de dados *678S+. 5oc' usa S! para realizar
consultas e atualiza%es numa base de dados. -ssim, voc' pode pensar em 4!., exatamente
como um env&lucro para S! *S! 9rapper+. :ma 4!. nem adiciona, nem subtrai poder
de S!. 4!. , simplesmente, um mecanismo para submisso de statements S!.
O 4!. re/uer o uso de drives de base de dados /ue aceitam uma c1amada 4!. e traduzem
essa c1amada para a linguagem nativa de acesso aos servidores de base de dados. 4om o
driver apropriado, cada aplicao)$onte de dados pode $uncionar como um servidor)4!., e
pode, ento, ser acessada por $erramentas front-end e programas)clientes /ue usam a 4!..
:ma 4!. re/uer um driver para cada base de dados para /ual ela se conecta. 4ada driver
deve ser escrito para um servidor espec$ico, usando os mtodos de acesso existentes para
bases de dados. - 4!. prov' um driver manager /ue $ala com um driver atravs de uma
S,. *Service ,rovider .nter$ace+.
A CLI ODBC da Microsoft
- -,. padro ;indo9s Open Database Connectivity *O674+ da 8icroso$t uma verso
estendida da 4!. S-2. Em agosto de <==>, a 8icroso$t liberou o O674 <.? S6@. O674
$oi desenvolvida para criar um 0nico padro de acesso base de dados no ambiente
;.#6O;S. - idia de O674 $oi criar uma maneira comum de acesso usando S!
*ODBC Driver Manager+, de $orma /ue uma aplicao)cliente pudesse acessar bases de
dados de di$erentes $ornecedores, como por exemplo, Oracle 6atabase, S! Server
*8icroso$t+, 67> *.78+, entre outras, atravs de seus drivers correspondentes. 5eja a
$igura < /ue mostra as camadas de O674 *!a3ers o$ O674+. O674 $oi a resposta s1rinA)
9rapped *um pacote restrito+ para acesso base de dados sob a plata$orma ;.#6O;S.
O674 uma -,. procedural. O674 lida com c1amadas Ba -,.. Embora a ind0stria ten1a
aceito O674 como o meio prim(rio para acessar bases de dados em ;.#6O;S, este
produto no traduz bem no mundo de "ava, /ue um mundo orientado a objeto. O674
uma inter$ace em 4C ela no pode usada Dcom E em "ava.
O674 <.? era lenta e Dbugg3EC ela $oi limitada plata$orma ;.#6O;S e $altava
documentao e exemplos de c&digo necess(rios para elucidar d0vidas de desenvolvedores.
Em abril de <==F, a 8icroso$t lanou o O674 >.? S6@, /ue terminou com muitos dos
problemas com o driver manager anterior. Em dezembro de <==F, os primeiro drives de G>)
bits O674 >.? $oram encomendados.
O674 existe para prover uma camada de abstrao para linguagens como 4 e 4HH, bem
como, $erramentas de desenvolvimento populares como 6E!,I., ,O;EJ 7:.!6EJ e
5.S:-! 7-S.4. 8as, O674 no prov' a independ'ncia de plata$orma do sistema
operacional como "ava.
O674 G.?, surgido em novembro de <==K, adiciona em torno de G?? p(ginas
especi$icao existente, introduz >? novas c1amadas de $un%es e suporta :nicode. O674
G.? retorna mais in$ormao, sobre aproximadamente F? novos tens. - 8icroso$t controla
totalmente o padro. - pergunta /ue se $az ainda 1oje, L O $uturo de O674 se aliar( com
S!GM4!. ou tornar)se)( um padro propriet(rio baseado em O!E N 8icroso$t promete
suporte S!G e ainda anuncia O!EM67 como o produto $uturo para substituir O674.
O674 tem muitas desvantagens. - mais sria /ue uma especi$icao controlada pela
8icroso$t, e est( constantemente sendo estendido. Seu $uturo tambm incerto, dado o
compromisso corrente da 8icroso$t com o O!EM67, /ue introduz um paradigma di$erente
de programao O baseado em objeto e no procedural. Os drivers atuais t'm di$erentes
nveis de compatibilidade, /ue no so bem documentados. -s camadas O674 introduzem
uma poro de overhead *especialmente para atualiza%es e inser%es S!+, e no so
nunca to r(pidos /uanto as -,.s nativas. ,ara $un%es simples de leitura)somente, os
drivers O674 esto agora em torno de <?P da per$ormance de um driver nativo.
A X/Ope SAG CLI
QMOpen uma organizao independente, voltada para sistemas abertos. Sua estratgia
combinar v(rios padr%es dentro de um ambiente de sistemas integrados compreensivo,
c1amado 4-E *Common Application Environment+, /ue correntemente contm um
portfolio envolvente de -,.s pr(ticas. QMOpen suporta suas especi$ica%es com um
conjunto extensivo de testes de con$ormidade /ue um produto deve passar para obter marca
registrada QMOpen *o Q,2 brand+.
-s -,.s S-2 so baseadas sobre SQL dinmico . Elas permitem voc' se conectar base
de dados atravs de um driver local *G c1amadas+, preparar re/uisi%es S! *R c1amadas+,
executar as re/uisi%es *> c1amadas+, terminar um S! statement *G c1amadas+ e terminar
uma conexo *G c1amadas+.
Em dezembro de <==F, S-2 voltou esta simples -,. para QMOpenC ela agora c1amada
X/Open CLI para di$erenciar de O674 da 8icroso$t e outras limita%es S-2. #o incio
de <==K, X/Open CLI tornou)se um padro internacional .SO =?SR)G D4all !evel
.nter$aceE. X/Open SQL CLI atualmente a base para a inter$ace O674 da 8icroso$t. O
$uturo SQL3 CLI baseada, tambm, sobre X/Open CLI, com algumas extens%es.
X/Ope S!L CLI e ODBC incluem drivers, conex%es, S! statements, cursores,
transa%es, conjuntos de resultados, procedures armazenadas, exce%es, entre outros
elementos.
CLI Vers"s E#$edded S!L
:ma alternativa 4!. Embeddeed S! *ES!+, /ue o padro de$inido .SO S!)=>,
para embutir statements S! Dcomo E dentro de linguagens de programao ordin(rias. O
S!)=> especi$ica a sintaxe para embutir S! em 4, 4O7O!, TOJUJ-#, ,!M<,
,-S4-!, 8:8,S e -6-. 4ada statement S! D$laggedE com identi$icadores
espec$icos da linguagem, /ue marcam o incio e o $imde uma statement S!. Esta
abordagem re/uer rodar S! atravs de um pr)compilador para gerar um ar/uivo de
c&digo)$onte /ue o compilador da linguagem entenda.
6a perspectiva de um pacote cliente)servidor, o maior obst(culo com ES! /ue a base de
dados alvo deve ser con1ecida e estar disponvel /uando o programa est( sendo
desenvolvido. .sto torna di$cil ligar um programa)cliente uma base de dados em tempo
de execuo.
Em geral, o /ue se tem 1oje em termos de S! 4!.s /ue essas so $lexveis, mas lentas.
Sistemas de alta per$ormance re/uerem o uso procedures armazenadas /ue executam as
statements S!. 7ases de dados proporcionam dois tipos de ,repared S!L statements
preparadas e procedures armazenadasC elas di$erem somente, no /ue podemos enviar a
statement S! base de dados para ser interpretada antes de voc' realmente us()la em sua
aplicao, ou no caso em /ue as statements S! j( esto prontas para serem executadas
atravs de procedures previamente situadas junto uma base de dados. 4!.s O como
O674 e "674 O tipicamente, permitem invocar uma procedure armazenada de um
$ornecedor espec$ico usando pass-throughs *voc' especi$ica o nome da procedure
armazenada e o servidor, como parVmetros na c1amada execute+. QMOpen, eventualmente,
especi$icar( uma c1amada de procedure armazenada 4!., baseada em S!G. Em todos os
casos, 4!. ainda demais lenta /uando comparada per$ormance de -,.s nativas.
O %"e & JDBC 'Ja(a DataBase Coectio)
Urabal1ando com as empresas lderes no campo de bases de dados *S3base, .n$ormix, .78
e outras+, "avaSo$t desenvolveu um -,. 0nica para acesso base de dados. O objetivo $oi
prover uma inter$ace orientada a objeto, para acessar uma base de dados relacional. 4omo
parte desse processo, eles guardaram tr's principais metas em menteL
"674 deveria ser uma -,. a nvel de S!. 7ases de 6ados S! o modelo de
aplicao /ue mais aparece como clienteMservidor. :ma -,. a nvel de S! signi$ica
/ue "674 permite)nos construir statements S! e embut)las dentro de c1amadas de
uma -,. "ava.
"674 deveria capitalizar a experi'ncia de -,.s de bases de dados existentes. 6e $ato
"avaSo$t projetou sobre os aspectos de sucesso da -,. de O674.
"674 deveria ser simples. "674 tenta ser to simples /uanto possvel, en/uanto
provendo desenvolvedores com a m(xima $lexibilidade.
"674 um conjunto de classes e inter$aces em "ava, /ue proporcionam uma inter$ace
similar a O674 para bases de dados S!.
5oc' pode usar "674, de dentro de seus programas "ava, para acessar /uase todos as bases
de dados S!, incluindo OJ-4!E S, SW7-SE, 67>, S! SEJ5EJ, -44ESS,
TOQ7-SE, ,-J-6OQ, ,JO2JESS, S!7ase e Q6J. 6rivers "674 esto disponveis
em S3mantec, .ntersolv, .78, "avaSo$t, e .nprise *7orland e 5isigenic+.
C*asses JDBC para criar Coe+,o
java.sql.DriverManager
DriverManager uma classe. Sua principal $uno manter uma lista de drivers de
di$erentes $ornecedores e associar uma aplicao)cliente com um driver /ue corresponda ao
:J! re/uerido.
java.sql.Connection
- classe Connection representa uma 0nica transao da base dados. 5oc' usa
Connection para enviar uma serie de statements S! base de dados e gerenciar a
realizao completa da transao *commiting+ ou o aborto dos statements da mesma
*aborting+.
java.s/l.S!Exception
- classe SQLException 1erda da classe geral java.lang.Exception, /ue prov'
in$ormao extra sobre erros nos acessos base de dados.
Se voc' obtm diversos erros durante a execuo de uma transao, voc' pode encade()los
todos eles juntos nesta classe. .sto $re/uentemente 0til /uando voc' tem exce%es /ue
voc' deseja permitir /ue o usu(rio saiba, mas voc' no deseja parar o processamento.
:m exemplo de uma simples conexo obtida com o seguinte c&digo "674L
inport java.net.:J!C
import java.s/l.4onnectionC
import java.s/l.6river8anagerC
import java.s/l.S!ExceptionC
MXX
X Esta classe jdbcY4onnection um programa /ue aceita a
X seguinte lin1a de comandoL
X "674 Simple4onnection 6J.5EJ :J! :.6 ,-SS;OJ6
X Se a :J! corresponde ao DsiteE do driver especi$icado, ento este X ser( carregado e uma
conexo dever( obtida.
XM
public class jdbcY4onnection Z
static public void main *String args [ \ + Z
MM 6eclara um objeto da classe 4onnection ainda inexistente.
4onnection connection ] nullC
MM ,rocessa a lin1a de comando
i$ * args.lengt1t ^] F + Z
S3stem.out.println * D"674 Simple4onnection D H
D6J.5EJ :J! :.6 ,-S;OJ6E +C
S3stem.exit *?+C
_
MM carrega a ponte)driver jdbcLodbc

tr3 Z
4lass.$or#ame * Djdbc.odbc."dbcOdbc6riverE +C
_
catc1 * Exception e + Z MM Tal1a ao carregar o driver
S3stem.err.println * DTal1a ao carregar o driverE +C
S3stem.exit *<+C
_

String url ] DjdbcLodbcLMM<R?.<K>.KG.SM67YUesteEC
tr3 Z
MM entra o nome do usu(rio *user name+ em args [?\,
MM neste nosso caso, voc' s& entra com o seu nome.

MM obtm a conexo ...
S3stem.out.println * D4onectando ao :J! especi$icadoE +C
connection ] 6river8anager.getconnection * url,
args [>\, D E +C
S3stem.out.println * D4onexo bem sucedida ^E +C
_
catc1 * S!Exception e + Z
e.printStacAUrace*+C
_
_
_
-ec.a#eto de "#a Coe+,o/ o M&todo C*ose')
-s classes Connection, Statement, e Result t'm o mtodo close*+, para
$ec1amento da conexo. :ma dada implementao "674 permitir( ou no, re/uerer o
$ec1amento da conexo antes /ue alguns objetos sejam reutilizados. ,ode acontecer de
existir um objeto /ue seja bom no ser destrudo. Ele poder( estar retendo recursos
importantes da base de dados. `, portanto, sempre uma boa idia $ec1ar /ual/uer instVncia
desses objetos, /uando voc' j( tiver $eito tudo com eles.
Gerado Istr"01es de At"a*i2a0,o
:m determinado grupo de instru%es S! pode ser considerado como de atualizao, no
sentido de /ue no se deve esperar /ue retornem lin1as de tabelas. Se encaizam neste
gruopo as instru%es de 4JE-UE U-7!E, .#SEJU, :,6-UE e 6E!EUE.
"674 $ornece um mtodo para enviar instru%es de atualizao sem esperar por resultados.
O objeto Statement, /ue $ornecido pelo objeto 4onnection, prov' o mtodo
execute:p6ate *+. ,ara executa()lo preciso obter antes um objeto Statement. 6epois de
$eito uma conexo bem sucedida, voc' pode recuperar um objeto Statement com uma lin1aL
Statement stmt ] connection.createStatement *+C
Ento, voc' pode executar instru%es de atualizaoL
stmt.execute:p6ate * D4JE-UE U-7!E .... E +C
stmt.execute:p6ate * D.#SEJU .#UO ... E +C
uando terminar de usar o objeto Satement, ele deve ser $ec1ado como voc' $az com uma
conexo.
stmt.close *+C
,ara criar uma tabela, o seguinte c&digo precisa ser executadoL
Exemplo >L
stmt.execute:p6ate * D 4JE-UE U-7!E 67YUeste
* idYprod int, nomeYprod 4I-J *<?+, /uantidade int,
preo $loat, taxaYicms $loat + E +C
-p&s a execuo deste comando, as lin1as na tabela devem ser inseridas atravs de
comandos comoL
stmt.execute:p6ate * D.#SEJU .#UO 67YUeste * nomeYcoluna,
nomeYcoluna, .... + 5-!:ES * valorYcoluna, valorYcoluna, .... +C
Acesso $3sico 4 Base de Dados
-gora /ue voc' est( conectado base da dados, voc' pode comear a $azer atualiza%es e
consultas.
O tipo mais b(sico de acesso base de dados envolve escrever c&digo "674 para
statements de atualiza%es *.#SEJU, :,6-UE, 6E!EUE+, ou consultas *SE!E4U+.
O acesso b(sico inicia com o objeto Connection /ue voc' criaou antes. uando este
objeto criado, ele uma simples ligao direta base de dados. 5oc' usa um objeto
Connection para gerar implementa%es de java.sql.statements vinculadas a
uma mesma transio.
-p&s voc' ter usado uma ou mais objetos da classe Statement gerados por sua 4onnection,
voc' pode usar ela para $azer commit ou rollback com os objetos statements associados
com a Connection.
:m objeto Statement uma declarao S!. :ma vez /ue voc' ten1a obtido um objeto
Connection, voc' tem os campos de como se $osse um Dc1e/ue em brancoE /ue voc'
pode preenc1er para a transao representada pelo objeto Connection.
"674 usa um mtodo di$erente para enviar consultas, em relao a atualiza%es. -
di$erena c1ave o $ato /ue o mtodo para consultas retorna uma instVncia de
java.sql.Result, en/uanto o mtodo de no)consultas retorna um inteiro. - classe
Result prov' voc' com acesso aos dados recuperados pela consulta.
C*asses de Acesso B3sico 4 Bases de Dados JDBC
#o /ue segue so explicadas as classes para acesso b(sico a uma base de dados usando
"674.
java.s/l.Statement
- classe Statement a mais b(sica das tr's classes "674 representando statements
S!. Ela realiza todas as statements S! b(sicas. Em geral, uma simples transao usa
somente um dos tr's mtodos de execuo de statements na classe Statement. O
primeiro mtodo, executeQuery*+, toma um string S! como um argumento e retorna
um objeto da classe Result. Este mtodo deve ser usado para /ual/uer c1amada S! /ue
espera retornar dados da base de dados. tatements DUpDateE so executadas usando o
mtodo executeUpDate*+. Este mtodo retorna o n0mero de lin1as a$etadas na base de
dados.
java.sql.Result
Result uma classe da /ual um objeto instanciado, representando uma lin1a de dados
retornada por uma consulta base de dados.
- classe Result prov' uma srie de mtodos para recuperar colunas dos resultados de
uma consulta base de dados. Os mtodos para obteno de uma coluna toda toma a $ormaL
t3pe get t3pe * int a string +
onde os argumentos representam ou o n0mero da coluna ou o nome da mesma.
,or/ue a classe Result manipula uma 0nica lin1a em /ual/uer dado tempo, a classe
prov' o mtodo next*+ para se $azer re$er'ncia para a pr&xima lin1a de um conjunto de
resultados.
Modificado a Base de Dados
#o exemplo anterior, n&s usamos "674 para realizar uma simples conexo. ` claro /ue,
no podemos realmente recuperar dados de uma base de dados antes de termos colocado
dados l(.
O Exemplo G mostra uma classe de atualizao, usando S! .#SEJU, suprida com a
implementao "674 para o driver associado ao seu $ornecedor de banco de dados. #o
caso, usaremos o driver O674 do 8icroso$t -ccess.
E#itido Istr"01es de At"a*i2a0,o co# S!L Isert
Exemplo GL
class jdbcY.nsert extends jdbcY4onnection Z

public static void main *String args [\+ Z
i$ * args.lengt1 ^] R + Z
S3stem.out.println * D"674 .nserindoE H D.6Y,JO6
#O8EY,JO6 U6 ,JEbO U-Q-E +C
S3stem.exit *?+C
_
tr3 Z

MM Obtm dados pela lin1a de comando.
String idYprod ] args [?\C
String nomeYprod ] args [<\C
String /uantidade ] args [>\C
String preo ] args [G\C
String taxaYicms ] args [F\C

MM Obtm um objeto Statement de 4onnection.
Statement stmt ] connection.createStatement*+C

MM .nsere uma lin1a em 67YUeste.
stmt.execute:p6ate * D.#SEJU
.#UO 67YUeste * idYprod, nomeYprod, /uantidade,
preo, taxaYicms +
5-!:ES *D H idYprod H D, D H nomeYprod HE,
D H /uantidade HE, D H preo HE,
D H taxaYicms HE + E +C
stmt.close*+C
_
catc1 *Exception e + Z
e.printStacAUrace*+C
_
_
_
Observe /ue, $azer uma c1amada uma c1amada base de dados, no nada mais /ue criar
um Statement e passar a declarao S! via um de seus mtodos execute. 6i$erente
de executeQuery*+, contudo, executeUpDate*+ no retorna um ResultSet *voc'
no deve estar esperando /uais/uer resultados+. -o invs disso, ele retorna o n0mero de
lin1as a$etadas pelas declara%es S!, :,6-UE, .#SEJU ou 6E!EUE.
,or default, "674 realiza *commits+ cada statement S! /uando ela enviada base de
dadosC isto c1amado autocommit. 4ontudo, uma manipulao mais robusta de erros, voc'
pode estabelecer um objeto Connection /ue emite uma srie de mudanas /ue no t'm
nen1um e$eito sobre a base de dados, at /ue voc' expressamente envie um commit. 4ada
Connection separada, e um commit sobre ela no tem nen1um e$eito sobre o statement
da outra. - classe Connection prov' o mtodo setAutoComit*+, assim voc' pode
tornar o autocommit desligado *o$$+. O exemplo G mostra uma simples aplicao /ue torna
o autocommit desligado e realiza *commits+ duas statements juntas ou no, sendo o 0ltimo
caso correspondendo ao caso em /ue a transao no consegue ser realizada.
E#itido Istr"0,o de At"a*i2a0,o co# S!L 56DATE
,ode ser muito 0til de$inir o n0mero de lin1as a$etadas por uma instruo de atualizao. O
objeto Statement $ornece um mtodo, get:p6ate4ount *+ para $azer exatamente isso.
Jetorna um valor inteiro depois de /ual/uer tipo de operao de atualizao /ue possa ser
utilizado para determinar se algumas lin1as $oram a$etadas pela operao ou no, e /uantas
lin1as $oram a$etadas.
8ostramos no Exemplo F, uma classe "674 com instruo de atualizao :,6-UE, /ue
veri$ica e conta as lin1as a$etadas.
Exemplo FL
class jdbcY:p6ate extends jdbcY4onnection Z
public static void main *String args [\+ Z

i$ * args.lengt1 ^] R + Z
S3stem.err.println * DErro, "674 .nserindoE H DEntre com
.6Y,JO6 #O8EY,JO6 U6 ,JEbO U-Q-E +C
S3stem.exit*<+C
_
tr3 Z
MM Obtm um objeto Statement de 4onnection
Statement stmt ] connection.createStatement *+C

MM 6eclara duas strings.
String idYprod, nomeYprodC

MM Emite uma atualizao simples.
stmt.execute:p6ate * D:,6-UE
cnomeY67d SEU /uantidade ] args[>\,
preo ] args[G\ ;IEJE idYprod ] args[?\
-#6 nomeYprod ] args[<\E +C

MM Obtm o valor do contador de atualiza%es.
int updateYcount ] stmt.get:p6ate4ount*+C
S3stem.out.println *updateYcount H Dlin1as atualizadas.E +C

MM Tec1a a statement S! criada para :p6ate.
stmt.close*+C

MM Tec1a a conexo estabelecida com a base de dados.
connection.close*+C
_
catc1 *Exception e + Z
S3stem.out.println *e.get8essage*+ +C
e.printStacAUrace*+C
_
_
_
E#itido "#a Istr"0,o de At"a*i2a0,o co# S!L DELETE
#o exemplo R, a seguir, est( o c&digo "674 para se realizar uma statement S! 6E!EUEL
class jdbcY6elete extends jdbcY4onnection Z

public static void main *String args [\+ Z
i$ * args.lengt1 ^] R + Z
S3stem.out.println * D"674 6eletandoE H D.6Y,JO6
#O8EY,JO6 U6 ,JEbO U-Q-Y.48SE +C
returnC
_
tr3 Z
Statement stmt ] connection.createStatement*+C
String nomeYprodC
int updateYcount ] stmt.execute:p6ate * D6E!EUE
TJO8 cnomeY67dE H
D ;IEJE nomeYprod ] args [<\ E +C
S3stem.out.println * updateYcount H Dlin1as deletadas.E +C
stmt.close*+C
connection.close *+C
_
catc1 *Exception e + Z
e.printStacAUrace*+C
_
_
_
Cos"*tado 4 Base de Dados
O exemplo K mostra o c&digo para a l&gica de uma simples consulta SE!E4U da
implementao "674 para a ponte de drivers "674LO674. - classe jdbcYSelect se
comunica com o DriverManager "674 para lig()la implementao ade/uada da base
de dados, situada na :J! indicada. O objeto Statement criado, realiza a consulta SE!E4U.
:m objeto ResultSet ento prov' aplicao)cliente com os campos key e val da
tabela t_test.
E+ec"tado Cos"*tas co# SELECT e Rec"perado os Res"*tados
4om dados armazenados em 67YUeste, podemos agora mostra um exemplo em /ue $eita
uma consulta sobre o preo e a /uantidade com relao a um produto determinado dentro
do statemente S! SE!E4U. O mtodo utilizado para realizar uma consulta
executeQuery(), o /ual retorna um objeto ResultSet.
,ara buscar a primeira lin1a, de acrdo com a consulta,voc' deve c1amar o mtodo next *+
de conjunto de resultadosL
result.next *+C
Se 1ouver mais lin1as, de acordo com a consulta, pode ser utilizado o next *+ para busc()las
e prepar()las para serem recuperadas com um dos mtodos getX *+. 6esde /ue next *+
responda com um valor booleano e no lance nen1uma execeo /uando no 1( mais
lin1as, possvel utilizar next *+ com segurana para testar a exist'ncia de mais lin1as em
um loop 91ile ou situao similar. :ma vez /ue voc' ten1a utilizado next *+ para buscar
pelo menos uma lin1a, poder( utilizar um dos mtodos getX *+, tal como getString *+ ou
get.nt *+L
String xxxx ] result.getString * DxxxxE +C
.nt 3333 ] result.get.nt * D3333E +C
Exemplo KL
public class jdbcYSelect extends jdbcY4onnection Z

public static void main * String args[\ + Z

tr3 Z
MM Obtm um objeto Statement a partir de 4onnection.
Statement select ] connection.createStatement*+C

MM Executa 4onsulta e retorna um conjunto de resultados.
JesultSet result ] select.executeuer3 * D SE!E4U
preo, /uantidade
TJO8 cnomeYdbd
;IEJE nomeYprod ] args[<\ E +C
MM
MM Obtendo os resultados.
S3stem.outprintln * DObtendo o 4onjunto de JesultadosL E +C
MM
91ile * result.next *+ +
Z
$loat preo ] result.getTloat * DpreoE +C
int /uantidade ] result.get.nt * D/uantidadeE +C

MM 8ostrando o conjunto de resultados.
S3stem.out.println * Dpreo ] E H preo +C
S3stem.out.println * D/uantidade ]E H /uantidade +C
_

MM Tec1a instruo de consulta.
stmt.close*+C

MM Tec1a a conexo com 67YUeste.
S3stem.outprintln * DTec1ando a 4onexoE +C
connection.close*+C
_
catc1 *Exception e + Z
S3stem.out.println *e.get8essage *+ +C
e.printStacAUrace*+C
_
_
_

Você também pode gostar