Você está na página 1de 14

Programando com Java

Artigo http://mballem.wordpress.com/


Utilizando Swing com Banco de Dados

Autor
Marcio Ballem: formado em Sistemas de Informao e possui certificao Oracle Certified Professional, Java
SE 6 Programmer. Trabalhou profissionalmente com desenvolvimento em Delphi 7 e Java JEE.

Introduo
Muitos iniciantes em J ava instalam, geralmente o Netbeans, e montam uma interface atravs dos
componentes visuais da IDE. No apenas o Netbeans que oferece esse recurso, o Eclipse, o Intellij Idea entre
outros tambm oferecem.
Com a interface montada eles querem fazer a ligao entre a interface e o banco de dados. Bom, ai que
surge a dvida. Como fazer?
Neste tutorial irei exemplificar de maneira bem simples, mas til, de como resolver este problema. Iremos
utilizar conexo J DBC com banco de dados Mysql e a interface ser feita no brao, como se costuma dizer
quando no utilizamos uma IDE para esse fim.
claro que quem quiser utilizar uma IDE para construir sua interface, pode faz-lo sem problemas, at por
que o intuito desse tutorial ser como enviar e receber os dados do banco de dados por uma interface grfica e
no como criar uma interface grfica.
Tambm tentarei explicar e exemplificar como funciona o padro Model View Controller ou MVC como
costuma ser chamado.

1. Arquivos necessrios
Como a conexo ser por J DBC, precisaremos do driver J DBC do Mysql, e tambm do Mysql instalado na
PC. Quem no quiser utilizar o Mysql, fique a vontade de utilizar qualquer outro gerenciador de banco de dados
ou mesmo um banco de dados do tipo standalone como Derby ou o HsqlDB (veja mais sobre eles em:
http://mballem.wordpress.com/2011/02/02/jdbc-com-banco-de-dados-standalone/).
Para baixar o Driver J DBC do Mysql, acesse: http://www.mysql.com/downloads/connector/j/. Aps baix-lo
adicione o arquivo mysql-connector-java-5.1.15-bin no projeto.
Para quem no tem o MySql instalado ainda, eu sugiro baixar o WampServer que vem com uma verso do
MySql e possui uma instalao bem mais rpida e simples, acesse http://www.wampserver.com/en/
Quem no quiser o WampServer, pode baixar o MySql em http://www.mysql.com/downloads/

2. Padro MVC
O objetivo do Model View Controller (MVC) separar os dados ou lgicas de negcios (Model) da interface
do usurio (View) e do fluxo da aplicao (Control). Utilizando este padro seria possvel reutilizar boa parte da
aplicao para a comunicao com outras interfaces e tambm torna mais fcil a manuteno na aplicao.


Imagine a situao em que voc cria uma aplicao em Swing sem a utilizao do padro MVC. Na classe
que contm a interface voc faz as chamadas a banco atravs de select, insert e demais mtodos que se
comunicam com o banco de dados. Ok, sua aplicao vai funcionar perfeitamente como voc queria.
Agora imagine que voc precisa que essa aplicao seja tambm criada para a Web. Bom, voc ter muito
trabalho, isto por que est tudo misturado na classe de interface. Na mesma classe voc fez as chamadas a
banco de dados e as regras de negcio. Agora ter que refazer tudo isso para criar a aplicao no formato
Web.
Caso no primeiro projeto voc tivesse usado o padro MVC, no precisaria refazer tudo, apenas criaria uma
nova interface no padro Web e a comunicaria com o seu controller. claro que no controller teria que mudar
algumas coisas, por que o padro Web trabalha com requisies e tudo mais, mas teria bem menos trabalho.
Esse trabalho seria bem menor tambm no caso de voc simplesmente querer atualizar a sua interface em
Swing para um modelo diferente. Mudaria apenas a interface, os mtodos principais da aplicao no
precisariam ser modificados.
Na aplicao que criaremos a seguir, o modelo MVC se aplica e pode ser visto mais ou menos assim:
Model: contm as classes Contato, ContatoDao, GenericDao e ConnectionDataBase
Controller: contm a classe ContatoController
View: contm a classe ContatoFrame
O processo funciona assim:
1. O usurio clica em um boto na interface (View). Esse boto possui um evento que faz uma
chamada ao Controller
2. O Controller atende essa chamada e ento se comunica com o Model
3. O Model executa, por exemplo, um acesso ao banco de dados, como uma consulta, e ento retorna
uma resposta ao Controller que retorna uma resposta a View
possvel na View o acesso ao Model, como instanciar uma classe de entidade para ter acesso aos seus
mtodos, mas nunca as classes que possuem relacionamentos com o banco de dados. No exemplo deste
tutorial foram passados para o Controller parmetros tipo String, mas poderiam ser os objetos do tipo
Contato (Entidade Contato).

3. Tabela contatos
Vamos criar a tabela Contatos, para isso, rode o script da listagem 1. Observe que estamos utilizando auto
incremento para o id da tabela, assim quem se preocupa com a criao dos ids o gerenciador do banco de
dados.
Listagem 1. Contatos.sql
CREATE TABLE I F NOT EXI STS `cont at os` (
`I D` BI GI NT( 20 ) NOT NULL AUTO_I NCREMENT ,
`NOME` VARCHAR( 50 ) NOT NULL UNI QUE ,
`APELI DO` VARCHAR( 15 ) NOT NULL ,
`DATA_NASCI MENTO` DATE NOT NULL ,
PRI MARY KEY ( `I D` )
)





4. Classe de conexo J DBC
Vamos criar a classe de conexo J DBC, conforme listagem 2.
Listagem 2. Classe ConnectionDataBase
package br . mb. t ut or i al J dbcsSwi ngMysql . dao;

i mpor t j ava. sql . Connect i on;
i mpor t j ava. sql . Dr i ver Manager ;
i mpor t j ava. sql . SQLExcept i on;

publ i c cl ass Connect i onDat aBase {

pr i vat e st at i c f i nal St r i ng URL_MYSQL = " j dbc: mysql : / / l ocal host / agenda" ;
pr i vat e st at i c f i nal St r i ng DRI VER_CLASS = " com. mysql . j dbc. Dr i ver " ;
pr i vat e st at i c f i nal St r i ng USER = " r oot " ;
pr i vat e st at i c f i nal St r i ng PASS = " " ;

publ i c st at i c Connect i on get Connect i on( ) {
Syst em. out . pr i nt l n( " Conect ando ao Banco de Dados" ) ;
t r y {
Cl ass. f or Name( DRI VER_CLASS) ;
r et ur n Dr i ver Manager . get Connect i on( URL_MYSQL, USER, PASS) ;
} cat ch ( Cl assNot FoundExcept i on e) {
e. pr i nt St ackTr ace( ) ;
} cat ch ( SQLExcept i on e) {
t hr ow new Runt i meExcept i on( e) ;
}
r et ur n nul l ;
}
}

Para quem instalou o WampServer o usurio root e a senha vazia por padro. Quem utilizou outra
instalao do Mysql, deve alterar para seu usurio e sua senha.
Criamos um mtodo chamado getConnection() que retorna um objeto de conexo com o banco de dados.
Neste mtodo chamamos o mtodo esttico getConnection(...) da classe DriverMenager, pelo qual passamos
as configuraes para a conexo.
Quando precisarmos de uma conexo como o banco de dados, vamos apenas fazer uma chamada ao
mtodo criado. Esta classe poder ser utilizada com qualquer banco de dados, basta apenas alterar os
parmetros DRIVER_CLASS, URL_MYSQL, USER, PASS e adicionar no projeto o driver J DBC referente ao
banco de dados usado.

5. Classe GenericDao
Vamos criar uma classe genrica para os mtodos insert, update e delete, veja na listagem 3.
Listagem 3. Classe GenericDao
package br . mb. t ut or i al J dbcSwi ngMysql . dao;

i mpor t j ava. sql . Connect i on;
i mpor t j ava. sql . Pr epar edSt at ement ;
i mpor t j ava. sql . SQLExcept i on;



publ i c abst r act cl ass Gener i cDao {
pr i vat e Connect i on connect i on;

pr ot ect ed Gener i cDao( ) {
t hi s. connect i on = Connect i onDat aBase. get Connect i on( ) ;
}

pr ot ect ed Connect i on get Connect i on( ) {
r et ur n connect i on;
}

pr ot ect ed voi d save( St r i ng i nser t Sql , Obj ect . . . par amet r os) t hr ows
SQLExcept i on {
Pr epar edSt at ement pst mt = get Connect i on( ) . pr epar eSt at ement ( i nser t Sql ) ;

f or ( i nt i = 0; i < par amet r os. l engt h; i ++) {
pst mt . set Obj ect ( i +1, par amet r os[ i ] ) ;
}

pst mt . execut e( ) ;
pst mt . cl ose( ) ;
}

pr ot ect ed voi d updat e( St r i ng updat eSql , Obj ect i d, Obj ect . . . par amet r os)
t hr ows SQLExcept i on {
Pr epar edSt at ement pst mt = get Connect i on( ) . pr epar eSt at ement ( updat eSql ) ;
f or ( i nt i = 0; i < par amet r os. l engt h; i ++) {
pst mt . set Obj ect ( i +1, par amet r os[ i ] ) ;
}
pst mt . set Obj ect ( par amet r os. l engt h + 1, i d) ;
pst mt . execut e( ) ;
pst mt . cl ose( ) ;
}

pr ot ect ed voi d del et e( St r i ng del et eSql , Obj ect . . . par amet r os) t hr ows
SQLExcept i on {
Pr epar edSt at ement pst mt = get Connect i on( ) . pr epar eSt at ement ( del et eSql ) ;
f or ( i nt i = 0; i < par amet r os. l engt h; i ++) {
pst mt . set Obj ect ( i +1, par amet r os[ i ] ) ;
}

pst mt . execut e( ) ;
pst mt . cl ose( ) ;
}
}


Esta classe poder ser usada por qualquer outra classe que faa acesso ao banco de dados. A vantagem
de criar uma classe desse tipo que no precisamos criar estes trs mtodos em cada classe que os
utilizarmos, precisamos apenas passar os parmetros necessrios para as aes com o banco de dados.
Veja que criamos um atributo connection, do tipo Connection, que recebe atravs do construtor da classe
uma conexo com o banco de dados sempre que a classe dao for instanciada. Essa conexo recebida vem
como retorno da classe ConnectionDataBase.
Os mtodos so protected para que apenas as classes que herdam GenericDao possoam ter acesso a eles.


O mtodo save() recebe dois parametros, o primeiro o sql que contm o insert e o segundo uma lista de
argumentos que pode passar vrios parmetros de uma s vez, algo muito parecido com um array, que
conter o valor dos campos do insert. O mtodo update() possui um parmetro a mais, que ser o id da coluna
que iremos executar o update.

6. Classe Contato
Nossa classe contato ter como atributos os campos da tabela Contatos. Para isso, crie a classe como na
listagem 4 e gere os mtodos getters e setters. Veja que ela foi criada no pacote model, esse model no o
mesmo Model do padro MVC, um pacote onde se costuma colocar as classes de entidades.
Listagem 4. Classe Contato
package br . mb. t ut or i al J dbcSwi ngMysql . model ;

i mpor t j ava. sql . Dat e;

publ i c cl ass Cont at o {
pr i vat e Long i d;
pr i vat e St r i ng nome;
pr i vat e St r i ng apel i do;
pr i vat e Dat e dt Nasci ment o;
/ / ger e os mt odos get t er s and set t er s
}


7. Classe ContatoDao
Criamos a classe GenericDao para ser herdadas pelos demais daos, assim, vamos agora criar a classe
ContatoDao, onde tero os mtodos mais especficos da classe. Veja na listagem 5.
Listagem 5. Classe ContatoDao
package br . mb. t ut or i al J dbcSwi ngMysql . dao;

i mpor t br . mb. t ut or i al J dbcSwi ngMysql . model . Cont at o;

i mpor t j ava. sql . Pr epar edSt at ement ;
i mpor t j ava. sql . Resul t Set ;
i mpor t j ava. sql . SQLExcept i on;
i mpor t j ava. ut i l . Ar r ayLi st ;
i mpor t j ava. ut i l . Li st ;

publ i c cl ass Cont at oDao ext ends Gener i cDao {

publ i c voi d sal var ( Cont at o cont at o) t hr ows SQLExcept i on {
St r i ng i nser t = " I NSERT I NTO CONTATOS( nome, apel i do, dat a_nasci ment o)
VALUES( ?, ?, ?) " ;
save( i nser t , cont at o. get Nome( ) , cont at o. get Apel i do( ) ,
cont at o. get Dt Nasci ment o( ) ) ;
}

publ i c voi d al t er ar ( Cont at o cont at o) t hr ows SQLExcept i on {
St r i ng updat e = " UPDATE CONTATOS " +
" SET nome = ?, apel i do = ?, dat a_nasci ment o = ? " +
" WHERE i d = ?" ;


updat e( updat e, cont at o. get I d( ) , cont at o. get Nome( ) , cont at o. get Apel i do( ) ,
cont at o. get Dt Nasci ment o( ) ) ;
}

publ i c voi d excl ui r ( l ong i d) t hr ows SQLExcept i on {
St r i ng del et e = " DELETE FROM CONTATOS WHERE i d = ?" ;
del et e( del et e, i d) ;
}

publ i c Li st <Cont at o> f i ndCont at os( ) t hr ows SQLExcept i on {
Li st <Cont at o> cont at os = new Ar r ayLi st <Cont at o>( ) ;

St r i ng sel ect = " SELECT * FROM CONTATOS" ;

Pr epar edSt at ement st mt = get Connect i on( ) . pr epar eSt at ement ( sel ect ) ;
Resul t Set r s = st mt . execut eQuer y( ) ;

whi l e ( r s. next ( ) ) {
Cont at o cont at o = new Cont at o( ) ;
cont at o. set I d( r s. get Long( " i d" ) ) ;
cont at o. set Nome( r s. get St r i ng( " nome" ) ) ;
cont at o. set Apel i do( r s. get St r i ng( " apel i do" ) ) ;
cont at o. set Dt Nasci ment o( r s. get Dat e( " dat a_nasci ment o" ) ) ;
cont at os. add( cont at o) ;
}

r s. cl ose( ) ;
st mt . cl ose( ) ;

r et ur n cont at os;
}

publ i c Cont at o f i ndByName( St r i ng nome) t hr ows SQLExcept i on {
St r i ng sel ect = " SELECT * FROM CONTATOS WHERE nome = ?" ;
Cont at o cont at o = nul l ;
Pr epar edSt at ement st mt = get Connect i on( ) . pr epar eSt at ement ( sel ect ) ;
st mt . set St r i ng( 1, nome) ;
Resul t Set r s = st mt . execut eQuer y( ) ;

whi l e ( r s. next ( ) ) {
cont at o = new Cont at o( ) ;
cont at o. set I d( r s. get Long( " i d" ) ) ;
cont at o. set Nome( r s. get St r i ng( " nome" ) ) ;
cont at o. set Apel i do( r s. get St r i ng( " apel i do" ) ) ;
cont at o. set Dt Nasci ment o( r s. get Dat e( " dat a_nasci ment o" ) ) ;
}

r s. cl ose( ) ;
st mt . cl ose( ) ;
r et ur n cont at o;
}

Veja que utilizamos herana nesta classe, herdando os mtodos criados na classe GenericDao. Nossos
mtodos salvar(), alterar() e excluir() possuem a criao do SQL que ser executado no banco de dados e uma
chamada ao mtodo da classe GenericDao, passando para ele o SQL e os demais parmetros.
Os mtodos salvar(), alterar() e excluir(), sero os mtodos acessados pela classe ContatoController para
manipulao com o banco de dados. Ainda criamos mais dois mtodos, um que retorna atravs de um select


uma lista com todos os contatos cadastrados no banco de dados e um que realizara um select pela coluna
nome da tabela contatos do banco de dados. Podem ser criadas mais consultas, mas para este tutorial vamos
utilizar apenas estes dois.

8. Classe ContatoController
A classe ContatoController ser o relacionamento entre o banco de dados e a interface com o usurios,
assim, no iremos misturar na classe da interface mtodos referentes ao banco de dados e a regras de
negcios. Crie a classe conforme a listagem 6.
Listagem 6. Classe ContatoController
package br . mb. t ut or i al J dbcSwi ngMysql . cont r ol l er ;

i mpor t br . mb. t ut or i al J dbcSwi ngMysql . dao. Cont at oDao;
i mpor t br . mb. t ut or i al J dbcSwi ngMysql . model . Cont at o;

i mpor t j avax. swi ng. *;
i mpor t j ava. sql . Dat e;
i mpor t j ava. sql . SQLExcept i on;
i mpor t j ava. t ext . Dat eFor mat ;
i mpor t j ava. t ext . Par seExcept i on;
i mpor t j ava. t ext . Si mpl eDat eFor mat ;
i mpor t j ava. ut i l . Li st ;

publ i c cl ass Cont at oCont r ol l er {

pr i vat e Dat e f or mat ar Dat a( St r i ng dat a) t hr ows Par seExcept i on {
Dat eFor mat f or mat t er = new Si mpl eDat eFor mat ( " dd/ MM/ yyyy" ) ;
r et ur n new Dat e( f or mat t er . par se( dat a) . get Ti me( ) ) ;
}

publ i c voi d sal var ( St r i ng nome, St r i ng apel i do, St r i ng dt Nasci ment o) t hr ows
SQLExcept i on, Par seExcept i on {
Cont at o cont at o = new Cont at o( ) ;
cont at o. set Nome( nome) ;
cont at o. set Apel i do( apel i do) ;
cont at o. set Dt Nasci ment o( f or mat ar Dat a( dt Nasci ment o) ) ;

new Cont at oDao( ) . sal var ( cont at o) ;
}

publ i c voi d al t er ar ( l ong i d, St r i ng nome, St r i ng apel i do, St r i ng dt Nasci ment o)
t hr ows Par seExcept i on, SQLExcept i on {
Cont at o cont at o = new Cont at o( ) ;
cont at o. set I d( i d) ;
cont at o. set Nome( nome) ;
cont at o. set Apel i do( apel i do) ;
cont at o. set Dt Nasci ment o( f or mat ar Dat a( dt Nasci ment o) ) ;

new Cont at oDao( ) . al t er ar ( cont at o) ;
}

publ i c Li st <Cont at o> l i st aCont at os( ) {
Cont at oDao dao = new Cont at oDao( ) ;
t r y {
r et ur n dao. f i ndCont at os( ) ;


} cat ch ( SQLExcept i on e) {
J Opt i onPane. showMessageDi al og( nul l , " Pr obl emas ao l ocal i zar cont at o\ n"
+ e. get Local i zedMessage( ) ) ;
}
r et ur n nul l ;
}

publ i c voi d excl ui r ( l ong i d) t hr ows SQLExcept i on {
new Cont at oDao( ) . excl ui r ( i d) ;
}

publ i c Cont at o buscaCont at oPor Nome( St r i ng nome) t hr ows SQLExcept i on {
Cont at oDao dao = new Cont at oDao( ) ;
r et ur n dao. f i ndByName( nome) ;
}
}

A classe ContatoController faz a comunicao entre o banco de dados e a interface, utilizamos aqui o
modelo conhecido como MVC(Model View Controller), onde separamos regras de negcios e interface. Criamos
aqui um mtodo para manipular a data. Os mtodos desta classe sero chamados pela interface, e faro a
chamada aos mtodos das classes daos para ento retornar para a interface o resultado.

9. Classe ContatoFrame
Agora criaremos a nossa classe de interface com o usurio. Quem for criar a interface com auxilio de uma
IDE qualquer, tente apenas utilizar as mesmas nomenclaturas dos atributos e mtodos para evitar problemas.
O resultado final ser uma interface como a da figura 1.

Figura 1 - Interface Contatos 1

Listagem 7. Classe ContatoFrame
package br . mb. t ut or i al J dbcSwi ngMysql . f r ame;



i mpor t br . mb. t ut or i al J dbcSwi ngMysql . cont r ol l er . Cont at oCont r ol l er ;
i mpor t br . mb. t ut or i al J dbcSwi ngMysql . model . Cont at o;

i mpor t j avax. swi ng. *;
i mpor t j ava. awt . *;
i mpor t j ava. awt . event . Act i onEvent ;
i mpor t j ava. awt . event . Act i onLi st ener ;
i mpor t j ava. sql . SQLExcept i on;
i mpor t j ava. t ext . Par seExcept i on;
i mpor t j ava. t ext . Si mpl eDat eFor mat ;
i mpor t j ava. ut i l . Li st ;

publ i c cl ass Cont at oFr ame ext ends J Fr ame {

pr i vat e J Label l bNome, l bApel i do, l bDt Nasci ment o;
pr i vat e J Text Fi el d t xt Nome, t xt Apel i do, t xt Dt Nasci ment o, t xt Local i zar ;
pr i vat e J But t on bt nSal var , bt nAl t er ar , bt nExcl ui r , bt nCl ear , bt nLocal i zar ;
pr i vat e J But t on bt nPr i mei r o, bt nPr oxi mo, bt nAnt er i or , bt nUl t i mo;

pr i vat e Li st <Cont at o> cont at oLi st = new Cont at oCont r ol l er ( ) . l i st aCont at os( ) ;
pr i vat e i nt r egi st r oAt ual = 0;

publ i c Cont at oFr ame( ) {
super ( " Cont at os" ) ;
Cont ai ner t el a = get Cont ent Pane( ) ;
set Layout ( nul l ) ;
l bNome = new J Label ( " Nome" ) ;
l bApel i do = new J Label ( " Apel i do" ) ;
l bDt Nasci ment o = new J Label ( " Dat a de Nasci ment o( dd/ mm/ aaaa) " ) ;

l bNome. set Bounds( 10, 10, 240, 15) ;
l bApel i do. set Bounds( 10, 50, 240, 15) ;
l bDt Nasci ment o. set Bounds( 10, 90, 240, 15) ;

l bNome. set For egr ound( Col or . BLACK) ;
l bApel i do. set For egr ound( Col or . BLACK) ;
l bDt Nasci ment o. set For egr ound( Col or . BLACK) ;

l bNome. set Font ( new Font ( " Cour i er New" , Font . BOLD, 14) ) ;
l bApel i do. set Font ( new Font ( " Cour i er New" , Font . BOLD, 14) ) ;
l bDt Nasci ment o. set Font ( new Font ( " Cour i er New" , Font . BOLD, 14) ) ;

t el a. add( l bNome) ;
t el a. add( l bApel i do) ;
t el a. add( l bDt Nasci ment o) ;

t xt Nome = new J Text Fi el d( ) ;
t xt Apel i do = new J Text Fi el d( ) ;
t xt Dt Nasci ment o = new J Text Fi el d( ) ;

t xt Nome. set Bounds( 10, 25, 265, 20) ;
t xt Apel i do. set Bounds( 10, 65, 265, 20) ;
t xt Dt Nasci ment o. set Bounds( 10, 105, 265, 20) ;

t el a. add( t xt Nome) ;
t el a. add( t xt Apel i do) ;
t el a. add( t xt Dt Nasci ment o) ;

bt nSal var = new J But t on( " Sal var " ) ;


bt nAl t er ar = new J But t on( " Al t er ar " ) ;
bt nExcl ui r = new J But t on( " Excl ui r " ) ;
bt nCl ear = new J But t on( " Li mpar " ) ;
bt nPr i mei r o = new J But t on( " | <" ) ;
bt nAnt er i or = new J But t on( " <<" ) ;
bt nPr oxi mo = new J But t on( " >>" ) ;
bt nUl t i mo = new J But t on( " >| " ) ;

bt nSal var . set Bounds( 280, 25, 80, 20) ;
bt nAl t er ar . set Bounds( 280, 65, 80, 20) ;
bt nExcl ui r . set Bounds( 280, 105, 80, 20) ;

t el a. add( bt nSal var ) ;
t el a. add( bt nAl t er ar ) ;
t el a. add( bt nExcl ui r ) ;

bt nPr i mei r o. set Bounds( 10, 135, 50, 20) ;
bt nAnt er i or . set Bounds( 60, 135, 50, 20) ;
bt nCl ear . set Bounds( 110, 135, 75, 20) ;
bt nPr oxi mo. set Bounds( 185, 135, 50, 20) ;
bt nUl t i mo. set Bounds( 235, 135, 50, 20) ;

t el a. add( bt nPr i mei r o) ;
t el a. add( bt nAnt er i or ) ;
t el a. add( bt nCl ear ) ;
t el a. add( bt nPr oxi mo) ;
t el a. add( bt nUl t i mo) ;

J Label l bLocal i zar = new J Label ( " Local i zar por nome" ) ;
l bLocal i zar . set Bounds( 10, 160, 220, 20) ;

t xt Local i zar = new J Text Fi el d( ) ;
t xt Local i zar . set Bounds( 10, 180, 220, 20) ;

bt nLocal i zar = new J But t on( " I r " ) ;
bt nLocal i zar . set Bounds( 230, 180, 55, 20) ;

t el a. add( l bLocal i zar ) ;
t el a. add( t xt Local i zar ) ;
t el a. add( bt nLocal i zar ) ;


set Si ze( 400, 250) ;
set Vi si bl e( t r ue) ;
set Locat i onRel at i veTo( nul l ) ;

bt nSal var . addAct i onLi st ener (
new Act i onLi st ener ( ) {
publ i c voi d act i onPer f or med( Act i onEvent e) {
onCl i ckSal var ( ) ;
}
}
) ;

bt nAl t er ar . addAct i onLi st ener (
new Act i onLi st ener ( ) {
publ i c voi d act i onPer f or med( Act i onEvent e) {
onCl i ckAl t er ar ( ) ;
}


}
) ;

bt nExcl ui r . addAct i onLi st ener (
new Act i onLi st ener ( ) {
publ i c voi d act i onPer f or med( Act i onEvent e) {
onCl i ckExcl ui r ( ) ;
}
}
) ;

bt nCl ear . addAct i onLi st ener (
new Act i onLi st ener ( ) {
publ i c voi d act i onPer f or med( Act i onEvent e) {
cl ear Fi el ds( ) ;
r egi st r oAt ual = 0;
}
}
) ;

bt nLocal i zar . addAct i onLi st ener (
new Act i onLi st ener ( ) {
publ i c voi d act i onPer f or med( Act i onEvent e) {
onCl i ckLocal i zar ( ) ;
}
}
) ;

bt nPr i mei r o. addAct i onLi st ener (
new Act i onLi st ener ( ) {
publ i c voi d act i onPer f or med( Act i onEvent e) {
onCl i ckPr i mei r o( ) ;
}
}
) ;
bt nAnt er i or . addAct i onLi st ener (
new Act i onLi st ener ( ) {
publ i c voi d act i onPer f or med( Act i onEvent e) {
onCl i ckAnt er i or ( ) ;
}
}
) ;

bt nPr oxi mo. addAct i onLi st ener (
new Act i onLi st ener ( ) {
publ i c voi d act i onPer f or med( Act i onEvent e) {
onCl i ckPr oxi mo( ) ;
}
}
) ;

bt nUl t i mo. addAct i onLi st ener (
new Act i onLi st ener ( ) {
publ i c voi d act i onPer f or med( Act i onEvent e) {
onCl i ckUl t i mo( ) ;
}
}
) ;
}



pr i vat e voi d onCl i ckUl t i mo( ) {
r egi st r oAt ual = cont at oLi st . si ze( ) - 1;
get Val or es( r egi st r oAt ual ) ;
}

pr i vat e voi d onCl i ckPr oxi mo( ) {
i f ( r egi st r oAt ual ! = cont at oLi st . si ze( ) - 1) {
get Val or es( ++r egi st r oAt ual ) ;
}
}

pr i vat e voi d onCl i ckAnt er i or ( ) {
i f ( r egi st r oAt ual ! = 0) {
get Val or es( - - r egi st r oAt ual ) ;
}
}

pr i vat e voi d onCl i ckPr i mei r o( ) {
r egi st r oAt ual = 0;
get Val or es( r egi st r oAt ual ) ;
}

pr i vat e voi d get Val or es( i nt i ndex) {
i f ( i ndex <= cont at oLi st . si ze( ) - 1) {
Cont at o cont at oAt ual = cont at oLi st . get ( i ndex) ;
t xt Nome. set Text ( cont at oAt ual . get Nome( ) ) ;
t xt Apel i do. set Text ( cont at oAt ual . get Apel i do( ) ) ;
t xt Dt Nasci ment o. set Text ( new
Si mpl eDat eFor mat ( " dd/ MM/ yyyy" ) . f or mat ( cont at oAt ual . get Dt Nasci ment o( ) ) ) ;
}
}

pr i vat e voi d onCl i ckAl t er ar ( ) {
Cont at oCont r ol l er cc = new Cont at oCont r ol l er ( ) ;
l ong i d = cont at oLi st . get ( r egi st r oAt ual ) . get I d( ) ;
t r y {
cc. al t er ar ( i d, t xt Nome. get Text ( ) , t xt Apel i do. get Text ( ) ,
t xt Dt Nasci ment o. get Text ( ) ) ;
J Opt i onPane. showMessageDi al og( t hi s, " Cont at o al t er ado comsucesso! " ) ;
cl ear Fi el ds( ) ;
cont at oLi st = new Cont at oCont r ol l er ( ) . l i st aCont at os( ) ;
} cat ch ( SQLExcept i on e) {
J Opt i onPane. showMessageDi al og( t hi s, " Nao f oi possi vel al t er ar
cont at o! \ n" + e. get Local i zedMessage( ) ) ;
} cat ch ( Par seExcept i on e) {
J Opt i onPane. showMessageDi al og( t hi s, " Dat a possui f or mat o i nvl i do! \ n"
+ e. get Local i zedMessage( ) ) ;
}
}

pr i vat e voi d onCl i ckSal var ( ) {
Cont at oCont r ol l er cc = new Cont at oCont r ol l er ( ) ;
t r y {
cc. sal var ( t xt Nome. get Text ( ) , t xt Apel i do. get Text ( ) ,
t xt Dt Nasci ment o. get Text ( ) ) ;
J Opt i onPane. showMessageDi al og( t hi s, " Cont at o sal vo comsucesso! " ) ;
cl ear Fi el ds( ) ;
cont at oLi st = new Cont at oCont r ol l er ( ) . l i st aCont at os( ) ;


} cat ch ( SQLExcept i on e) {
J Opt i onPane. showMessageDi al og( t hi s, " Nao f oi possi vel sal var
cont at o! \ n" + e. get Local i zedMessage( ) ) ;
} cat ch ( Par seExcept i on e) {
J Opt i onPane. showMessageDi al og( t hi s, " Dat a possui f or mat o i nvl i do! \ n"
+ e. get Local i zedMessage( ) ) ;
}
}

pr i vat e voi d onCl i ckExcl ui r ( ) {
Cont at oCont r ol l er cc = new Cont at oCont r ol l er ( ) ;
l ong i d = cont at oLi st . get ( r egi st r oAt ual ) . get I d( ) ;
t r y {
cc. excl ui r ( i d) ;
J Opt i onPane. showMessageDi al og( t hi s, " Cont at o excl ui do comsucesso! " ) ;
cl ear Fi el ds( ) ;
cont at oLi st = new Cont at oCont r ol l er ( ) . l i st aCont at os( ) ;
} cat ch ( SQLExcept i on e) {
J Opt i onPane. showMessageDi al og( t hi s, " Nao f oi possi vel excl ui r o
cont at o! \ n" + e. get Local i zedMessage( ) ) ;
}
}

pr i vat e voi d onCl i ckLocal i zar ( ) {
Cont at oCont r ol l er cc = new Cont at oCont r ol l er ( ) ;
t r y {
Cont at o c = cc. buscaCont at oPor Nome( t xt Local i zar . get Text ( ) ) ;
t xt Nome. set Text ( c. get Nome( ) ) ;
t xt Apel i do. set Text ( c. get Apel i do( ) ) ;
t xt Dt Nasci ment o. set Text ( new
Si mpl eDat eFor mat ( " dd/ MM/ yyyy" ) . f or mat ( c. get Dt Nasci ment o( ) ) ) ;
} cat ch ( SQLExcept i on e) {
J Opt i onPane. showMessageDi al og( t hi s, " Ocor r eu umer r o, t ent e
novament e! \ n" + e. get Local i zedMessage( ) ) ;
} cat ch ( Nul l Poi nt er Except i on e) {
J Opt i onPane. showMessageDi al og( t hi s, " Cont at o no l ocal i zdo ou no
exi st e! \ n" + e. get Local i zedMessage( ) ) ;
}
}

pr i vat e voi d cl ear Fi el ds( ) {
t xt Nome. set Text ( " " ) ;
t xt Apel i do. set Text ( " " ) ;
t xt Dt Nasci ment o. set Text ( " " ) ;
t xt Local i zar . set Text ( " " ) ;
}

publ i c st at i c voi d mai n( St r i ng[ ] ar gs) {
Cont at oFr ame f r ame = new Cont at oFr ame( ) ;
f r ame. set Def aul t Cl oseOper at i on( J Fr ame. EXI T_ON_CLOSE) ;
}
}

Nesta classe temos a criao da interface com usurio e os mtodos que se comunicam com o controller
para enviar ou receber dos dados do banco de dados. Alm dos atributos referentes aos componentes da
interface, foram criados mais dois atributos, o contatoList e o registroAtual. O contatoList uma lista que ir


guarda a consulta do banco de dados para a visualizao de todos os contatos cadastrados. O registroAtual ir
guaradar a posio atual do regitro na lista, que ser til para a navegao entre os registros.
Os mtodos onClickUltimo(), onClickProximo(), onClickAnterior() e onClickPrimeiro() enviaro para o mtodo
getValores() a posio atual na lista, para ento os campos do formulrio serem preenchidos com estes
valores. Esta navegao feita toda dentro da lista, assim poupa o trabalho de ficar abrindo e fechando a
conexo com o banco de dados a todo momento, o que considerado um alto custo para uma apliao.
Os mtodos onClickSalvar(), onClickExcluir() e onClickAlterar(), passam por parmetros os dados
necessrios para os mtodos no controller interagirem com o banco de dados.
O mtodo onClickLocalizar() ir fazer uma consulta atravs do parmetro nome. O parmetro deve ser
digitado no campo especifico e o clique no boto Ir faz a chamada ao mtodo onClickLocalizar() que se
comunica com o controller. O controller faz a chamada aos daos que retorna o resultado da consuta.
O mtodo clearFields() serve apenas para limpar os campos quando estiverem preenchidos com dados.
Sobre a utilizao do padro MVC, por exemplo, no mtodo onClickSalvar() poderia ao invs de enviar 3
parmetros do tipo String, um unico parmetro do tipo Contato. Assim, ao invs de criar o objeto contato no
controller como foi feito, criariamos dentro do mtodo onClickSalvar().

Concl uso
Este tutorial exemplificou de forma simples como utilizar SWING com Banco de Dados. Tambm
exemplificou como utilizar o padro MVC.
Agora que voc j sabe como criar os eventos com o banco de dados atravs da interface, experimente
criar outras tabelas no banco de dados e outras interfaces para testar o que aprendeu at aqui. Lembre-se,
para cada tabela criada, crie uma nova entidade, um novo dao especifico e um novo controller.

Sai ba mai s
Model View Controller http://pt.wikipedia.org/wiki/MVC.
MySql http://www.mysql.com/
J DBC artigo Guj http://www.guj.com.br/articles/7
J DBC tutorial Oracle http://download.oracle.com/javase/tutorial/jdbc/index.html
Netbeans http://netbeans.org
Eclipse http://www.eclipse.org/downloads/
Intellij Idea http://www.jetbrains.com/idea/download/

Você também pode gostar