Acessando Bancos de Dados com Java - Versão Gráfica - INF

Propaganda
Especialização em web com interfaces
ricas
Acessando Bancos de Dados com Java Versão Gráfica (Continuação)
Prof. Fabrízzio Alphonsus A. M. N. Soares
[email protected] [email protected]
Instituto de Informática
Universidade Federal de Goiás
Aula 5
25 de maio de 2012
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Versão Gráfica (Continuação)
1/23
Bancos de Dados com Java
Nesta aula finalizaremos a montagem do aplicativo visual com
acesso a banco de dados.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Versão Gráfica (Continuação)
2/23
Tabela - Exemplo I
Tabela: cliente
matricula
nome
idade
sexo
integer
varchar(50)
integer
char(1)
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Versão Gráfica (Continuação)
3/23
Problema - Exemplo I
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Versão Gráfica (Continuação)
4/23
Pesquisando os clientes I
Existem várias abordagens para se efetuar a consulta dos clientes.
Abaixo seguem alguns exemplos:
1
Criar um botão de pesquisa que utiliza os dados do
campo matrícula
2
Criar um botão de pesquisa que abre uma nova janela
para realizar a pesquisa dos clientes
3
Pesquisar automaticamente assim que o usuário tira o
foco do campo matrícula
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Versão Gráfica (Continuação)
5/23
Pesquisando os clientes II
Nesta aula iremos realizar as abordagens 1 e 3.
Porém, embora vamos nesta aula fazer esses dois modos. Não é
interessante fornecer ambos ao usuário. É fundamental fornecer
só um. Muitas opções para a mesma coisa tendem a confundir
o usuário.
Ambas as formas tem vantagens. Escolha aquela que se
enquadre na sua necessidade ou padrão.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Versão Gráfica (Continuação)
6/23
Criando um botão para pesquisa I
Botão declarado no corpo do formulário:
1
private JButton pesquisar;
Inicialização do botão:
1
2
3
pesquisar = new JButton("Pesquisar");
content.add(pesquisar);
pesquisar.setBounds(210, 30, 110, 20);
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Versão Gráfica (Continuação)
7/23
Criando um botão para pesquisa II
Adicionando o evento ao botão
1
2
3
4
5
pesquisar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt){
pesquisarActionPerformed(evt);
}
});
Método pesquisarActionPerformed
1
2
3
4
private void pesquisarActionPerformed(ActionEvent evt){
if (pesquisarDados() == false)
JOptionPane.showMessageDialog(this, "Matrícula não
encontrada");
}
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Versão Gráfica (Continuação)
8/23
Criando um botão para pesquisa III
Criando o método de pesquisa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
private boolean pesquisarDados(){
if (matricula.getText().length() == 0){
numeroMatricula = 0;
return false;
}
try {
PreparedStatement st = cn.prepareStatement(
"select * from cliente where matricula = ?"
);
st.setInt(1,Integer.parseInt(matricula.getText()));
ResultSet rs = st.executeQuery();
if (rs.next()) {
nome.setText(rs.getString("nome"));
idade.setText(rs.getString("idade"));
if (rs.getString("sexo").equals("M"))
sexo.setSelectedIndex(0);
else
sexo.setSelectedIndex(1);
numeroMatricula = rs.getInt("matricula");
nome.requestFocus();
rs.close();
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Versão Gráfica (Continuação)
9/23
Criando um botão para pesquisa IV
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
st.close();
return true;
} else {
numeroMatricula = 0;
rs.close();
st.close();
return false;
}
} catch (SQLException e) {
JOptionPane.showMessageDialog(
this,
"Erro ao pesquisar o registro."
);
}
return false;
}
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Versão Gráfica (Continuação)
10/23
Pesquisando quando a caixa de texto
perde o foco I
Evento Focus Lost
Imports necessários
1
2
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
Adicionando o evento à caixa de texto
1
2
3
4
5
matricula.addFocusListener(new FocusAdapter() {
public void focusLost(FocusEvent evt) {
matriculaFocusLost(evt);
}
});
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Versão Gráfica (Continuação)
11/23
Pesquisando quando a caixa de texto
perde o foco II
Método matriculaFocusLost
1
2
3
private void matriculaFocusLost(FocusEvent evt){
pesquisarDados();
}
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Versão Gráfica (Continuação)
12/23
Organizando o código
É recomendável se separar o código sempre em funções que
reflitam sua finalidade.
Lembre-se: Funções devem fazer apenas uma coisa e
muito bem feita!
Assim, funções que fazem uma única coisa geralmente são pequenas. Se sua função está grande, provavelmente ela faz mais
de uma coisa.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Versão Gráfica (Continuação)
13/23
Dividindo as funções I
Evento e função para excluir
1
2
3
private void excluirActionPerformed(ActionEvent evt){
excluirCliente();
}
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Versão Gráfica (Continuação)
14/23
Dividindo as funções II
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private void excluirCliente(){
if (numeroMatricula == 0){
JOptionPane.showMessageDialog(this, "Pesquise uma
matrícula antes de excluí-la.");
matricula.requestFocus();
return;
}
try {
PreparedStatement st = cn.prepareStatement("delete from
cliente where matricula = ?");
st.setInt(1,Integer.parseInt(matricula.getText()));
st.execute();
st.close();
limparCampos();
} catch (SQLException e) {
JOptionPane.showMessageDialog(this, "Erro ao inserir o
registro.");
}
}
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Versão Gráfica (Continuação)
15/23
Dividindo as funções III
Evento e função para salvar
1
2
3
private void salvarActionPerformed(ActionEvent evt){
inserirCliente();
}
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Versão Gráfica (Continuação)
16/23
Dividindo as funções IV
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private void inserirCliente(){
try {
PreparedStatement st = cn.prepareStatement(
"insert into cliente (matricula, nome, idade, sexo)
values (?, ?, ?, ?)");
st.setInt(1,Integer.parseInt(matricula.getText()));
st.setString(2, nome.getText());
st.setInt(3, Integer.parseInt(idade.getText()));
if (sexo.getSelectedIndex() == 0) st.setString(4, "M");
else st.setString(4, "F");
st.execute();
st.close();
JOptionPane.showMessageDialog(this, "Cliente inserido com
sucesso.");
limparCampos();
} catch (SQLException e) {
JOptionPane.showMessageDialog(this, "Erro ao inserir o
registro.");
}}
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Versão Gráfica (Continuação)
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 vão ser alterados.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Versão Gráfica (Continuação)
18/23
Alterando o cliente II
Assim, é preciso então ter um controle se os dados já foram
consultados para serem alterados.
Uma forma de fazer isto é criar uma variável que irá conter
valores que definirão estados.
Por exemplo:
Novo
Carregado
Isto pode ser feito com uma variável do tipo boolean
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Versão Gráfica (Continuação)
19/23
Alterando o cliente III
A abordagem adotada aqui será utilizar uma variável int para
conter a matrícula pesquisada. E os estados poderão ser os
seguintes:
Se o cliente não foi pesquisado, foi pesquisado e não foi
encontrado, ou foi clicado no botão novo a variavel
numeroMatricula conterá o valor ZERO;
Se o cliente foi pesquisado e encontrado a variável
numeroMatricula conterá o valor do campo matrícula.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Versão Gráfica (Continuação)
20/23
Implementando a função de alteração I
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private void atualizarCliente(){
try {
PreparedStatement st = cn.prepareStatement(
"update cliente set nome = ?, idade = ?, sexo = ? where
matricula = ?");
st.setString(1, nome.getText());
st.setInt(2, Integer.parseInt(idade.getText()));
if (sexo.getSelectedIndex() == 0) st.setString(3, "M");
else st.setString(3, "F");
st.setInt(4,Integer.parseInt(matricula.getText()));
st.execute();
st.close();
JOptionPane.showMessageDialog(this, "Cliente alterado com
sucesso.");
limparCampos();
} catch (SQLException e) {
JOptionPane.showMessageDialog(this, "Erro ao atualizar o
registro.");
}}
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Versão Gráfica (Continuação)
21/23
Implementando a função de alteração II
Alterando o botão salvar
1
2
3
4
5
6
private void salvarActionPerformed(ActionEvent evt){
if (numeroMatricula == 0)
inserirCliente();
else
atualizarCliente();
}
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Versão Gráfica (Continuação)
22/23
Implementando a função de alteração III
É importante lembrar que se a variável numeroMatricula é utilizada para validar as situações em que o registro será salvo é
importante mante-la bem atualizada.
Assim, ela deverá ser modificada para acompanhar os estados
da aplicação.
Se foi clicado no botão novo, na pesquisa não foi
encontrado um registro, ou o registro foi excluído. Deve
se atribuir ZERO à variável.
Se for pesquisado e encontrado, ou o registro for
alterados o um registro deve-se atribuir o número da
matrícula em uso.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java - Versão Gráfica (Continuação)
23/23
Download