2 de jun. de 2020

Java Desktop - Cadastro CRUD 4.2 - Classe DAO

Vamos ver nesta quarta parte as rotinas de código que fazem o CRUD, inserindo, lendo, atualizando e deletando dados do banco, usando o IntelliJ
Lista das publicações anteriores:
  1. Java Desktop - Cadastro CRUD - 1.2: IDE IntelliJ
  2. Java Desktop - Cadastro CRUD - 2.2: MVC IntelliJ
  3. Java Desktop - Cadastro CRUD - 3.2: MySQL Server

Para isso, criamos uma classe no pacote dao (Data Access Object), ClienteDAO, funcionando os objetos de acesso a dados.

Implementação da Interface DAO


Crie a classe ClenteDAO (como vimos na parte 2): botão direito do mouse sobre o pacote br.com.nomedoseusite.dao - New - Class):


java-desktop-crud-classedao



Digite, após o nome da classe ClienteDAOimplements (escrevendo as primeiras letras o IntelliJ já mostrará a sugestão abaixo); 




Após implements, digite Dao, ou somente a letra D (maiúscula) e escolha a opção que corresponde ao pacote br.com.nomedoseusite.util:




O IntelliJ vai sublinhar em vermelho, chamando a atenção que você precisa implementar os métodos da Interface Dao. Com o cursor na linha, pressione Alt + Enter para abrir as opções e escolha a primeira: implement methods:



Confirme no OK:



O resultado é esse:



Rotinas de códigos dos métodos


Para inserir um cadastro no banco, após preencher os campos no formulário, o insert faz o comando SQL para inserir os dados no banco, onde nos valores (values) serão preenchidas as incógnitas (?) de acordo com o que "pegar" o método get, em cada atributo da classe Cliente relacionada aos campos do banco. Confira as sequências de códigos abaixo comentados. 

Só reforçando que, digitando o código, a sua memória "grava", mas copiando e colando, nem com "reza brava"!

1 public void insert(Object o) {
2   Cliente c = (Cliente) o; //Cast para inserir com Object um objeto da classe Cliente;
3   String sql = "insert into cliente (nome,endereco,municipio,cep,tel,cel,cpf,cnpj,genero) values (?,?,?,?,?,?,?,?,?)";
4   //Comando SQL para fazer a inserção no banco dos valores preenchidos no formulário (objeto Cliente);
5    try {
6     PreparedStatement ps = Conector.getConexao().prepareStatement(sql);
7     ps.setString(1, c.getNome());
8     ps.setString(2, c.getEndereco());
9     ps.setString(3, c.getMunicipio());
10    ps.setString(4, c.getCep());
11   ps.setString(5, c.getTel());
12   ps.setString(6, c.getCel());
13   ps.setString(7, c.getCpf());
14   ps.setString(8, c.getCnpj());
15   ps.setString(9, c.getGenero());
16   //Pega os valores do objeto Cliente (gets) e atribui aos campos da tabela;
17   
18   ps.execute(); //Executa o PreparedStatement
19  } catch (SQLException e) {
20   
21   e.printStackTrace();
22  }
23 } 

Já para atualizar, SQL update set onde as incógnitas (?) neste caso serão preenchidas com os dados alterados no campo de texto do formulário, para cada campo da tabela do banco, relacionada com os atributos da classe Cliente.

1 public void update(Object o) {
2   Cliente c = (Cliente) o;
3   String sql = "update cliente set nome=?,endereco=?,municipio=?,cep=?,tel=?,cel=?,cpf=?,cnpj=?,genero=? where id=?";
4   //Comando SQL para fazer a atualização no banco dos valores alterados no formulário (objeto Clente);
5   try {
6    PreparedStatement ps = Conector.getConexao().prepareStatement(sql);
7    ps.setString(1, c.getNome());
8    ps.setString(2, c.getEndereco());
9    ps.setString(3, c.getMunicipio());
10   ps.setString(4, c.getCep());
11   ps.setString(5, c.getTel());
12   ps.setString(6, c.getCel());
13   ps.setString(7, c.getCpf());
14   ps.setString(8, c.getCnpj());
15   ps.setString(9, c.getGenero());
16   ps.setInt(10, c.getId());
17   //Pega os valores do objeto Cliente (gets) e atribui aos campos (?) da tabela;
18   ps.execute();
19  } catch (SQLException e) {
20   
21   e.printStackTrace();
22  }
23 }

Em seguida, deletar dados no banco consiste em executar o comando SQL delete pelo identificador id (chave primária) do registro ou cadastro que estiver aberto no formulário do sistema. 

1 public void delete(Object o) {
2   Cliente c = (Cliente) o;
3   String sql = "delete from cliente where id=?";
4   //Comando SQL para fazer a exclusão no banco pelo campo chave primária - id;
5   try {
6    PreparedStatement ps = Conector.getConexao().prepareStatement(sql);
7    //Faz a conexão com o banco e prepara o comando SQL;
8    ps.setInt(1, c.getId());
9    //Pega o valor do objeto Cliente (c.getId) e abribui ao campo chave primária - id;
10   ps.execute();
11   //Executa o comando;
12  } catch (SQLException e) {
13 
14   e.printStackTrace();
15  }
16 }

seleção de um registro do banco, para exibir na tela do formulário, retorna um objeto Cliente, após este ser instanciado; o comando SQL select ser executado e, ao contrário do método insert, os dados serem capturados dos campos da tabela do banco.

1 public Object select(int i) {
2   Cliente c = new Cliente();
3   //Faz a instância da classe Cliente;
4   String sql = "select * from cliente where id=?";
5   //Instrução SQL para seleção de registro específico da tabela cliente, pelo id;
6   try {
7    PreparedStatement ps = Conector.getConexao().prepareStatement(sql);
8    ResultSet rs = ps.executeQuery(); //java.sql.ResultSet
9    while(rs.next()){
10   //Laço de repetição para preencher com os dados do banco o objeto Cliente;
11    c.setNome(rs.getString("nome"));
12    c.setEndereco(rs.getString("endereco"));
13    c.setMunicipio(rs.getString("municipio"));
14    c.setCep(rs.getString("cep"));
15    c.setTel(rs.getString("tel"));
16    c.setCel(rs.getString("cel"));
17    c.setCpf(rs.getString("cpf"));
18    c.setCnpj(rs.getString("cnpj"));
19    c.setGenero(rs.getString("genero"));
20    //"seta" os atributos da classe Cliente com os dados dos campos do banco - pega os dados do banco para pesquisa no formulário;
21   }
22  } catch (SQLException e) {
23   
24   e.printStackTrace();
25  }
26  return c;
27 }

campo de pesquisa (combobox) do formulário será preenchido mediante a rotina a seguir. 

  • cria uma lista de Clientes List; o comando select SQL faz a leitura de todos os registros da tabela; 
  • o laço de repetição while percorre estes registros e atribuem ao objeto da classe Cliente;
  • este objeto, por sua vez, é adicionado à lista (list.add(c)). Completa retornando a lista (return list).

1 public List select() {
2   List list = new ArrayList();
3   //Cra uma lista dos objetos da classe Cliente;
4   String sql = "select * from cliente";
5   //Instrução SQL para seleção de todos os registros da tabela Cliente;
6   PreparedStatement ps;
7   try {
8    ps = Conector.getConexao().prepareStatement(sql);
9    ResultSet rs = ps.executeQuery();
10   //Executa a pesquisa da seleção SQL e atribui o resultado ao ResultSet;
11   while(rs.next()){
12    Cliente c = new Cliente();
13    //Faz a instância da classe Cliente;
14    c.setId(rs.getInt("id"));
15    c.setNome(rs.getString("nome"));
16    c.setEndereco(rs.getString("endereco"));
17    c.setMunicipio(rs.getString("municipio"));
18    c.setCep(rs.getString("cep"));
19    c.setTel(rs.getString("tel"));
20    c.setCel(rs.getString("cel"));
21    c.setCpf(rs.getString("cpf"));
22    c.setCnpj(rs.getString("cnpj"));
23    c.setGenero(rs.getString("genero"));
24    //"seta" os atributos da classe Cliente com os dados dos campos do banco;
25    list.add(c);
26    //Adiciona à lista os dados do resultado do laço while;
27   }
28  } catch (SQLException e) {
29   
30   e.printStackTrace();
31  }
32  return list;
33 }

Com isso a classe ClienteDao está completa. 

Vale a pena estudar com calma esta classe, linha por linha, pois estes códigos se repetem em todos os projetos para funcionar o CRUD.

Na próxima parte veremos a classe JFrame, para a janela de formulário.

Nenhum comentário: