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
fabrizzio@inf.ufg.br professor.fabrizzio@gmail.com Instituto de Informática
Bancos de Dados com Java
Nesta aula finalizaremos a montagem do aplicativo visual com acesso a banco de dados.
Tabela - Exemplo I
Tabela: cliente matricula integer nome varchar(50) idade integer sexo char(1)Pesquisando os clientes I
Existem várias abordagens para se efetuar a consulta dos clien-tes.
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
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.
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 pesquisar = new JButton("Pesquisar");
2 content.add(pesquisar);
Criando um botão para pesquisa II
Adicionando o evento ao botão
1 pesquisar.addActionListener(new ActionListener() {
2 public void actionPerformed(ActionEvent evt){
3 pesquisarActionPerformed(evt);
4 }
5 });
Método pesquisarActionPerformed
1 private void pesquisarActionPerformed(ActionEvent evt){
2 if (pesquisarDados() == false)
3 JOptionPane.showMessageDialog(this, "Matrícula não
encontrada");
Criando um botão para pesquisa III
Criando o método de pesquisa
1 private booleanpesquisarDados(){ 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");
Criando um botão 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 }
Pesquisando quando a caixa de texto
perde o foco I
Evento Focus Lost Imports necessários
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 }
Pesquisando quando a caixa de texto
perde o foco II
Método matriculaFocusLost
1 private void matriculaFocusLost(FocusEvent evt){
2 pesquisarDados();
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 pe-quenas. Se sua função está grande, provavelmente ela faz mais de uma coisa.
Dividindo as funções I
Evento e função para excluir
1 private void excluirActionPerformed(ActionEvent evt){
2 excluirCliente();
Dividindo as funções II
1 private void excluirCliente(){
2 if (numeroMatricula == 0){
3 JOptionPane.showMessageDialog(this, "Pesquise uma
matrícula 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 }
Dividindo as funções III
Evento e função para salvar
1 private void salvarActionPerformed(ActionEvent evt){
2 inserirCliente();
Dividindo as funções 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.");
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.
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
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.
Implementando a função de alteração 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
Implementando a função de alteração II
Alterando o botão salvar
1 private void salvarActionPerformed(ActionEvent evt){
2 if (numeroMatricula == 0)
3 inserirCliente();
4 else
5 atualizarCliente();
Implementando a função de alteração III
É importante lembrar que se a variável numeroMatricula é uti-lizada 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.