Você está na página 1de 23

Especializao em web com interfaces

ricas

Acessando Bancos de Dados com Java -


Verso Grfica (Continuao)

Prof. Fabrzzio Alphonsus A. M. N. Soares

fabrizzio@inf.ufg.br professor.fabrizzio@gmail.com
Instituto de Informtica
Universidade Federal de Gois

Aula 5
25 de maio de 2012
Prof. Fabrzzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Verso Grfica (Continuao)
1/23
Bancos de Dados com Java

Nesta aula finalizaremos a montagem do aplicativo visual com


acesso a banco de dados.

Prof. Fabrzzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Verso Grfica (Continuao)
2/23
Tabela - Exemplo I

Tabela: cliente

matricula integer
nome varchar(50)
idade integer
sexo char(1)

Prof. Fabrzzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Verso Grfica (Continuao)
3/23
Problema - Exemplo I

Prof. Fabrzzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Verso Grfica (Continuao)
4/23
Pesquisando os clientes I

Existem vrias abordagens para se efetuar a consulta dos clien-


tes.
Abaixo seguem alguns exemplos:
1 Criar um boto de pesquisa que utiliza os dados do
campo matrcula
2 Criar um boto de pesquisa que abre uma nova janela
para realizar a pesquisa dos clientes
3 Pesquisar automaticamente assim que o usurio tira o
foco do campo matrcula

Prof. Fabrzzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Verso Grfica (Continuao)
5/23
Pesquisando os clientes II

Nesta aula iremos realizar as abordagens 1 e 3.


Porm, embora vamos nesta aula fazer esses dois modos. No
interessante fornecer ambos ao usurio. fundamental fornecer
s um. Muitas opes para a mesma coisa tendem a confundir
o usurio.
Ambas as formas tem vantagens. Escolha aquela que se
enquadre na sua necessidade ou padro.

Prof. Fabrzzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Verso Grfica (Continuao)
6/23
Criando um boto para pesquisa I

Boto declarado no corpo do formulrio:


1 private JButton pesquisar;

Inicializao do boto:
1 pesquisar = new JButton("Pesquisar");
2 content.add(pesquisar);
3 pesquisar.setBounds(210, 30, 110, 20);

Prof. Fabrzzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Verso Grfica (Continuao)
7/23
Criando um boto para pesquisa II

Adicionando o evento ao boto


1 pesquisar.addActionListener(new ActionListener() {
2 public void actionPerformed(ActionEvent evt){
3 pesquisarActionPerformed(evt);
4 }
5 });

Mtodo pesquisarActionPerformed
1 private void pesquisarActionPerformed(ActionEvent evt){
2 if (pesquisarDados() == false)
3 JOptionPane.showMessageDialog(this, "Matrcula no
encontrada");
4 }

Prof. Fabrzzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Verso Grfica (Continuao)
8/23
Criando um boto para pesquisa III
Criando o mtodo de pesquisa
1 private boolean pesquisarDados(){
2 if (matricula.getText().length() == 0){
3 numeroMatricula = 0;
4 return false;
5 }
6 try {
7 PreparedStatement st = cn.prepareStatement(
8 "select * from cliente where matricula = ?"
9 );
10 st.setInt(1,Integer.parseInt(matricula.getText()));
11 ResultSet rs = st.executeQuery();
12
13 if (rs.next()) {
14
15 nome.setText(rs.getString("nome"));
16 idade.setText(rs.getString("idade"));
17
18 if (rs.getString("sexo").equals("M"))
19 sexo.setSelectedIndex(0);
20 else
21 sexo.setSelectedIndex(1);
22
23 numeroMatricula = rs.getInt("matricula");
24 nome.requestFocus();
25
26 rs.close();

Prof. Fabrzzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Verso Grfica (Continuao)
9/23
Criando um boto para pesquisa IV

27 st.close();
28
29 return true;
30 } else {
31 numeroMatricula = 0;
32 rs.close();
33 st.close();
34 return false;
35 }
36
37 } catch (SQLException e) {
38 JOptionPane.showMessageDialog(
39 this,
40 "Erro ao pesquisar o registro."
41 );
42 }
43 return false;
44 }

Prof. Fabrzzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Verso Grfica (Continuao)
10/23
Pesquisando quando a caixa de texto
perde o foco I

Evento Focus Lost


Imports necessrios
1 import java.awt.event.FocusAdapter;
2 import java.awt.event.FocusEvent;

Adicionando o evento caixa de texto


1 matricula.addFocusListener(new FocusAdapter() {
2 public void focusLost(FocusEvent evt) {
3 matriculaFocusLost(evt);
4 }
5 });

Prof. Fabrzzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Verso Grfica (Continuao)
11/23
Pesquisando quando a caixa de texto
perde o foco II

Mtodo matriculaFocusLost
1 private void matriculaFocusLost(FocusEvent evt){
2 pesquisarDados();
3 }

Prof. Fabrzzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Verso Grfica (Continuao)
12/23
Organizando o cdigo

recomendvel se separar o cdigo sempre em funes que


reflitam sua finalidade.
Lembre-se: Funes devem fazer apenas uma coisa e
muito bem feita!
Assim, funes que fazem uma nica coisa geralmente so pe-
quenas. Se sua funo est grande, provavelmente ela faz mais
de uma coisa.

Prof. Fabrzzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Verso Grfica (Continuao)
13/23
Dividindo as funes I

Evento e funo para excluir


1 private void excluirActionPerformed(ActionEvent evt){
2 excluirCliente();
3 }

Prof. Fabrzzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Verso Grfica (Continuao)
14/23
Dividindo as funes II
1 private void excluirCliente(){
2 if (numeroMatricula == 0){
3 JOptionPane.showMessageDialog(this, "Pesquise uma
matrcula antes de exclu-la.");
4 matricula.requestFocus();
5 return;
6 }
7 try {
8 PreparedStatement st = cn.prepareStatement("delete from
cliente where matricula = ?");
9 st.setInt(1,Integer.parseInt(matricula.getText()));
10 st.execute();
11 st.close();
12 limparCampos();
13 } catch (SQLException e) {
14 JOptionPane.showMessageDialog(this, "Erro ao inserir o
registro.");
15 }
16 }

Prof. Fabrzzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Verso Grfica (Continuao)
15/23
Dividindo as funes III

Evento e funo para salvar


1 private void salvarActionPerformed(ActionEvent evt){
2 inserirCliente();
3 }

Prof. Fabrzzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Verso Grfica (Continuao)
16/23
Dividindo as funes IV
1 private void inserirCliente(){
2 try {
3 PreparedStatement st = cn.prepareStatement(
4 "insert into cliente (matricula, nome, idade, sexo)
values (?, ?, ?, ?)");
5 st.setInt(1,Integer.parseInt(matricula.getText()));
6 st.setString(2, nome.getText());
7 st.setInt(3, Integer.parseInt(idade.getText()));
8 if (sexo.getSelectedIndex() == 0) st.setString(4, "M");
9 else st.setString(4, "F");
10 st.execute();
11 st.close();
12 JOptionPane.showMessageDialog(this, "Cliente inserido com
sucesso.");
13 limparCampos();
14 } catch (SQLException e) {
15 JOptionPane.showMessageDialog(this, "Erro ao inserir o
registro.");
16 }}

Prof. Fabrzzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Verso Grfica (Continuao)
17/23
Alterando o cliente I

Uma tarefa importante atualizar os dados do cliente.


Para realizar tal tarefa, conveniente que os dados do cliente
j tenham sido lidos, afinal, eles vo ser alterados.

Prof. Fabrzzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Verso Grfica (Continuao)
18/23
Alterando o cliente II

Assim, preciso ento ter um controle se os dados j foram


consultados para serem alterados.
Uma forma de fazer isto criar uma varivel que ir conter
valores que definiro estados.
Por exemplo:
Novo
Carregado
Isto pode ser feito com uma varivel do tipo boolean

Prof. Fabrzzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Verso Grfica (Continuao)
19/23
Alterando o cliente III

A abordagem adotada aqui ser utilizar uma varivel int para


conter a matrcula pesquisada. E os estados podero ser os
seguintes:
Se o cliente no foi pesquisado, foi pesquisado e no foi
encontrado, ou foi clicado no boto novo a variavel
numeroMatricula conter o valor ZERO;
Se o cliente foi pesquisado e encontrado a varivel
numeroMatricula conter o valor do campo matrcula.

Prof. Fabrzzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Verso Grfica (Continuao)
20/23
Implementando a funo de alterao I

1 private void atualizarCliente(){


2 try {
3 PreparedStatement st = cn.prepareStatement(
4 "update cliente set nome = ?, idade = ?, sexo = ? where
matricula = ?");
5 st.setString(1, nome.getText());
6 st.setInt(2, Integer.parseInt(idade.getText()));
7 if (sexo.getSelectedIndex() == 0) st.setString(3, "M");
8 else st.setString(3, "F");
9 st.setInt(4,Integer.parseInt(matricula.getText()));
10 st.execute();
11 st.close();
12 JOptionPane.showMessageDialog(this, "Cliente alterado com
sucesso.");
13 limparCampos();
14 } catch (SQLException e) {
15 JOptionPane.showMessageDialog(this, "Erro ao atualizar o
registro.");
16 }}

Prof. Fabrzzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Verso Grfica (Continuao)
21/23
Implementando a funo de alterao II

Alterando o boto salvar


1 private void salvarActionPerformed(ActionEvent evt){
2 if (numeroMatricula == 0)
3 inserirCliente();
4 else
5 atualizarCliente();
6 }

Prof. Fabrzzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Verso Grfica (Continuao)
22/23
Implementando a funo de alterao III

importante lembrar que se a varivel numeroMatricula uti-


lizada para validar as situaes em que o registro ser salvo
importante mante-la bem atualizada.
Assim, ela dever ser modificada para acompanhar os estados
da aplicao.
Se foi clicado no boto novo, na pesquisa no foi
encontrado um registro, ou o registro foi excludo. Deve
se atribuir ZERO varivel.
Se for pesquisado e encontrado, ou o registro for
alterados o um registro deve-se atribuir o nmero da
matrcula em uso.

Prof. Fabrzzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Verso Grfica (Continuao)
23/23

Você também pode gostar