Buscar

14POO_aula07_doc01

Prévia do material em texto

Aprenda Fazendo 
 
Vamos implementar um pequeno sistema de cadastro de clientes para aplicar os conhecimentos aqui 
apresentados, bem como verificar a interligação dos campos com os componentes visuais. 
 
Exercício: 
 
Com o exercício feito na aula 6, vamos fazer um CRUD1 completo para a tabela Cliente no banco de 
dados dbCliente criado no PostgreSQL. 
 
A Interface a ser desenvolvida deverá seguir o padrão apresentado abaixo: 
 
 
Neste exemplo iremos utilizar as seguintes características: 
 
Consulta: 
Ao clicar no botão incluir, será feita uma pesquisa no banco para buscar todos os clientes da loja. Com o 
conjunto de dados retornado, são criados objetos Cliente e estes adicionados em uma lista. Vamos 
utilizar o ListIterator para andarmos na lista tanto para frente quando para trás. 
Observe que será apresentado o primeiro cliente e os botões estarão habilitados. 
 
 
O código para este passo é apresentado abaixo: 
 
 
1 CRUD – Acrônimo para Create, Read, Update e Delete, que são as 4 operações básicas 
utilizadas em um banco de dados relacional. 
 
 private void trataBtConsulta() { 
 montaListaBanco(); 
 } 
 private void montaListaBanco() { 
 
 try { 
 Clientes.clear(); 
 Class.forName("org.postgresql.Driver"); 
 Connection con = DriverManager.getConnection("jdbc:postgresql:dbCliente","aluno","estacio"); 
 Statement st = con.createStatement(); 
 String sql = "SELECT * FROM tbcliente ORDER BY id;"; 
 ResultSet rs = st.executeQuery(sql); 
 while (rs.next()){ 
 Cliente auxCliente = new Cliente(); 
 auxCliente.setId(rs.getInt(1)); 
 auxCliente.setNome(rs.getString(2)); 
 Clientes.add(auxCliente); 
 } 
 apresenta_primeiro(); 
 rs.close(); 
 st.close(); 
 con.close(); 
 } 
 catch(ClassNotFoundException e){ 
 System.out.println(e.toString()); 
 } 
 catch(Exception e) { 
 System.out.println(e.toString()); 
 } 
 } 
 
Vários métodos foram criados para auxiliar a programação e evitar a repetição de código. Abaixo eles 
estão apresentados: 
 
 private void apresenta_primeiro() { 
 it = Clientes.listIterator(); 
 jBtnAnterior.setEnabled(true); 
 jBtnProximo.setEnabled(true); 
 jBtnInclui.setEnabled(true); 
 jBtnAtualiza.setEnabled(true); 
 jBtnExclui.setEnabled(true); 
 mostraCliente((Cliente)it.next()); 
 } 
 private void mostraCliente(Cliente cliente) { 
 jTFId.setText(Integer.toString(cliente.getId())); 
 jTFNome.setText(cliente.getNome()); 
 } 
 private void mostraMsg(String s){ 
 jLblMsg.setText(s); 
 } 
Ao clicar nos botões anterior e próximo, iremos andar pela lista independente do banco de dados. 
Neste exemplo, não estamos implementando o isolamento entre a camada de interface com a camada de 
dados, como sugerido e aconselhado nas boas práticas de programação. Um ótimo exercício após a 
execução deste exercício é refazer apresentando este isolamento. 
É sempre bom lembrar que é fundamental para o seu sistema funcionar a instalação do JDBC no projeto, 
neste caso, o do PostgreSQL. 
 
Ao clicar no botão Incluir, foi criado uma estrutura de inclusão de dados, onde limpamos os campos e 
habilitamos o botão Incluir. Quando clicamos no botão Incluir, o objeto Cliente é criado e incluído no 
banco de dados. 
 
O botão de Inclusão serve tanto para incluir quanto para alterar. Para isso, foi colocado um comando if 
para determinar que parte do código deverá ser executado. 
 
 private void trataBtInclui() { 
 limpaCampos(); 
 habilitaConsulta(false); 
 mostraMsg("Entre com os valores"); 
 jBtnIncluir.setText("Incluir"); 
 jBtnIncluir.setVisible(true); 
 jBtnIncluir.setEnabled(true); 
 } 
 
 private void trataBtIncluir() { 
 Cliente auxCliente; 
 String retorno; 
 auxCliente = new Cliente(); 
 auxCliente.setId(Integer.parseInt(jTFId.getText())); 
 auxCliente.setNome(jTFNome.getText()); 
 retorno = incluiClienteBD(auxCliente); 
 mostraMsg(retorno); 
 jBtnIncluir.setVisible(false); 
 jBtnIncluir.setEnabled(false); 
 montaListaBanco(); 
 habilitaConsulta(true); 
 } 
 
 private String incluiClienteBD(Cliente auxCliente) { 
 int registrosAfetados=0; 
 if((jBtnIncluir.getText()).equals("Incluir")){ 
 try { 
 Class.forName("org.postgresql.Driver"); 
 Connection con = DriverManager.getConnection("jdbc:postgresql:dbCliente","aluno","estacio"); 
 Statement st = con.createStatement(); 
 String sql = "INSERT INTO tbcliente VALUES 
("+Integer.toString(auxCliente.getId())+",'"+auxCliente.getNome()+"')"; 
 registrosAfetados=st.executeUpdate(sql); 
 st.close(); 
 con.close(); 
 } 
 catch(ClassNotFoundException e){ 
 System.out.println(e.toString()); 
 } 
 catch(Exception e) { 
 System.out.println(e.toString()); 
 } 
 
 if (registrosAfetados>0) 
 return("Cliente Cadastrado"); 
 else 
 return("Nenhum cliente foi cadastrado"); 
 } 
 else{ 
 jTFId.setEditable(true); 
 jBtnAtualiza.setText("Atualizar"); 
 try { 
 Class.forName("org.postgresql.Driver"); 
 Connection con = DriverManager.getConnection("jdbc:postgresql:dbCliente","aluno","estacio"); 
 Statement st = con.createStatement(); 
 String sql = "UPDATE tbcliente SET nome='"+jTFNome.getText()+"' WHERE id="+jTFId.getText(); 
 registrosAfetados=st.executeUpdate(sql); 
 
 st.close(); 
 con.close(); 
 } 
 catch(ClassNotFoundException e){ 
 System.out.println(e.toString()); 
 } 
 catch(Exception e) { 
 System.out.println(e.toString()); 
 } 
 if (registrosAfetados>0) 
 return("Cliente Alterado"); 
 else 
 return("Nenhum cliente foi alterado"); 
 } 
 } 
 
Podemos observar que toda a parte da alteração já está pronta neste métodos acima. 
 
Ao clicarmos no botão Excluir, será solicitado a confirmação da exclusão do elemento apresentado na 
tela. Caso a resposta seja positiva, removemos o elemento do banco de dados e é solicitado para se 
montar a lista novamente. 
 
 private void trataBtExcluir() { 
 int resp; 
 resp = JOptionPane.showConfirmDialog(null, "Confirma a exclusão do registro "+jTFId.getText()+" 
?","Confirmação de Exclusão",JOptionPane.YES_NO_OPTION); 
 if (resp==0) 
 mostraMsg(removeElementoBanco(Integer.parseInt(jTFId.getText()))); 
 
 
 } 
 
 private String removeElementoBanco(int identificador) { 
 int registrosAfetados=0; 
 try { 
 Class.forName("org.postgresql.Driver"); 
 Connection con = DriverManager.getConnection("jdbc:postgresql:dbCliente","aluno","estacio"); 
 Statement st = con.createStatement(); 
 String sql = "DELETE FROM tbcliente WHERE ID="+identificador; 
 registrosAfetados=st.executeUpdate(sql); 
 st.close(); 
 con.close(); 
 } 
 catch(ClassNotFoundException e){ 
 System.out.println(e.toString()); 
 } 
 catch(Exception e) { 
 System.out.println(e.toString()); 
 }if (registrosAfetados>0) 
 return("Cliente Removido"); 
 else 
 return("Nenhum cliente foi removido"); 
 } 
 
No Botão Alterar, foi implementado a opção do usuário cancelar a alteração. Abaixo está apresentado o 
método. 
 
 private void trataBtAltera() { 
 if((jBtnAtualiza.getText()).equals("Atualizar")){ 
 
 habilitaConsulta(false); 
 jBtnExclui.setEnabled(false); 
 jBtnInclui.setEnabled(false); 
 mostraMsg("Entre com os valores"); 
 jBtnIncluir.setText("Alterar"); 
 jBtnAtualiza.setText("Cancelar"); 
 jBtnIncluir.setVisible(true); 
 jBtnIncluir.setEnabled(true); 
 jTFId.setEditable(false); 
 } 
 else { 
 habilitaConsulta(true); 
 jBtnExclui.setEnabled(true); 
 jBtnInclui.setEnabled(true); 
 mostraMsg("Atualização Cancelada"); 
 jBtnIncluir.setText("Incluir"); 
 jBtnAtualiza.setText("Atualizar"); 
 jBtnIncluir.setVisible(false); 
 jBtnIncluir.setEnabled(false); 
 
 jTFId.setEditable(true); 
 } 
 
 }

Continue navegando