Tutorial: Criar CRUD em Java com JDBC – Parte 2 (Final)


Bom galera, essa a segunda e última parte do post Criar CRUD em Java com JDBC.

Para acessar a parte 1 basta clicar aqui.

Nesse post nós vamos aprender a realizar algumas operações de CRUD com JDBC.

Nós criamos a base no post anterior que tem uma tabela chamada contatos, agora nós vamos criar nossa classe Java para representar um contato.

Para isso crie uma classe chamada Contato no pacote br.com.agenda.model, e digite o código abaixo:


package br.com.agenda.model;

import java.util.Date;

public class Contato {

private int id;
 private String nome;
 private int idade;
 private Date dataCadastro;

 public int getId() {
 return id;
 }

 public void setId(int id) {
 this.id = id;
 }

 public String getNome() {
 return nome;
 }

 public void setNome(String nome) {
 this.nome = nome;
 }

 public int getIdade() {
 return idade;
 }

 public void setIdade(int idade) {
 this.idade = idade;
 }

 public Date getDataCadastro() {
 return dataCadastro;
 }

 public void setDataCadastro(Date dataCadastro) {
 this.dataCadastro = dataCadastro;
 }
}

Pronto o nosso modelo para contatos está criado, agora nós vamos criar a nossa classe que vai encapsular todas operações referente ao banco de dados.

Para isso crie uma classe chamada ContatoDAO no pacote br.com.agenda.dao e digite o código abaixo:


package br.com.agenda.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.agenda.factory.ConnectionFactory;
import br.com.agenda.model.Contato;

public class ContatoDAO {

public void save(Contato contato){

 /*
 * Isso é uma sql comum, os ? são os parâmetros que nós vamos adicionar
 * na base de dados
 */

 String sql = "INSERT INTO contatos(nome,idade,dataCadastro)" +
 " VALUES(?,?,?)";

 Connection conn = null;
 PreparedStatement pstm = null;

 try {
 //Cria uma conexão com o banco
 conn = ConnectionFactory.createConnectionToMySQL();

 //Cria um PreparedStatment, classe usada para executar a query
 pstm = conn.prepareStatement(sql);

 //Adiciona o valor do primeiro parâmetro da sql
 pstm.setString(1, contato.getNome());
 //Adicionar o valor do segundo parâmetro da sql
 pstm.setInt(2, contato.getIdade());
 //Adiciona o valor do terceiro parâmetro da sql
 pstm.setDate(3, new Date(contato.getDataCadastro().getTime()));

 //Executa a sql para inserção dos dados
 pstm.execute();

 } catch (Exception e) {

 e.printStackTrace();
 }finally{

 //Fecha as conexões

 try{
 if(pstm != null){

 pstm.close();
 }

 if(conn != null){
 conn.close();
 }

 }catch(Exception e){

 e.printStackTrace();
 }
 }
 }

 public void removeById(int id){

 String sql = "DELETE FROM contatos WHERE id = ?";

 Connection conn = null;
 PreparedStatement pstm = null;

 try {
 conn = ConnectionFactory.createConnectionToMySQL();

 pstm = conn.prepareStatement(sql);

 pstm.setInt(1, id);

 pstm.execute();

 } catch (Exception e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }finally{

 try{
 if(pstm != null){

 pstm.close();
 }

 if(conn != null){
 conn.close();
 }

 }catch(Exception e){

 e.printStackTrace();
 }
 }
 }

 public void update(Contato contato){

 String sql = "UPDATE contatos SET nome = ?, idade = ?, dataCadastro = ?" +
 " WHERE id = ?";

 Connection conn = null;
 PreparedStatement pstm = null;

 try {
 //Cria uma conexão com o banco
 conn = ConnectionFactory.createConnectionToMySQL();

 //Cria um PreparedStatment, classe usada para executar a query
 pstm = conn.prepareStatement(sql);

 //Adiciona o valor do primeiro parâmetro da sql
 pstm.setString(1, contato.getNome());
 //Adicionar o valor do segundo parâmetro da sql
 pstm.setInt(2, contato.getIdade());
 //Adiciona o valor do terceiro parâmetro da sql
 pstm.setDate(3, new Date(contato.getDataCadastro().getTime()));

 pstm.setInt(4, contato.getId());

 //Executa a sql para inserção dos dados
 pstm.execute();

 } catch (Exception e) {

 e.printStackTrace();
 }finally{

 //Fecha as conexões

 try{
 if(pstm != null){

 pstm.close();
 }

 if(conn != null){
 conn.close();
 }

 }catch(Exception e){

 e.printStackTrace();
 }
 }
 }

 public List<Contato> getContatos(){

 String sql = "SELECT * FROM contatos";

 List<Contato> contatos = new ArrayList<Contato>();

 Connection conn = null;
 PreparedStatement pstm = null;
 //Classe que vai recuperar os dados do banco de dados
 ResultSet rset = null;

 try {
 conn = ConnectionFactory.createConnectionToMySQL();

 pstm = conn.prepareStatement(sql);

 rset = pstm.executeQuery();

 //Enquanto existir dados no banco de dados, faça
 while(rset.next()){

 Contato contato = new Contato();

 //Recupera o id do banco e atribui ele ao objeto
 contato.setId(rset.getInt("id"));

 //Recupera o nome do banco e atribui ele ao objeto
 contato.setNome(rset.getString("nome"));

 //Recupera a idade do banco e atribui ele ao objeto
 contato.setIdade(rset.getInt("idade"));

 //Recupera a data do banco e atribui ela ao objeto
 contato.setDataCadastro(rset.getDate("dataCadastro"));

 //Adiciono o contato recuperado, a lista de contatos
 contatos.add(contato);
 }
 } catch (Exception e) {

 e.printStackTrace();
 }finally{

 try{

 if(rset != null){

 rset.close();
 }

 if(pstm != null){

 pstm.close();
 }

 if(conn != null){
 conn.close();
 }

 }catch(Exception e){

 e.printStackTrace();
 }
 }

 return contatos;
 }
}

Pronto criamos todos os métodos para realizar as operações de CRUD, agora basta usar eles, para isso crie uma classe chamada TesteAgenda na raiz do seu projeto e digite o código abaixo:


import java.util.Date;

import br.com.agenda.dao.ContatoDAO;
import br.com.agenda.model.Contato;
public class TesteAgenda {

public static void main(String args[]){

 ContatoDAO contatoDAO = new ContatoDAO();

 //Cria um contato e salva no banco
 Contato contato = new Contato();
 contato.setNome("ETELVINO");
 contato.setIdade(503);
 contato.setDataCadastro(new Date());

 contatoDAO.save(contato);

 //Atualiza o contato com id = 1 com os dados do objeto contato1
 Contato contato1 = new Contato();
 contato1.setId(1);
 contato1.setNome("NOME NOVO");
 contato1.setIdade(32);
 contato1.setDataCadastro(new Date());

 contatoDAO.update(contato1);

 //Remove o contato com id = 1

 contatoDAO.removeById(1);

 //Lista todos os contatos do banco de dados

 for(Contato c : contatoDAO.getContatos()){

 System.out.println("NOME: " + c.getNome());
 }
 }
}

Pronto criamos o nosso CRUD em Java com JDBC, agora você pode usar essas operações em aplicações desktop ou até mesmo aplicações web.

Espero que tenham gostado.

Até o próximo post.

20 ideias sobre “Tutorial: Criar CRUD em Java com JDBC – Parte 2 (Final)

  1. Georjuan

    Legal, vou indicar p/ o pessoal que me aparece todo dia pedindo ajuda p/ fazer um CRUD;

    Só umas dicas p/ ficar melhor:
    * fazer o DAO implementar um interface p/ os métodos ficarem ficarem padrão para todos DAOs;
    * usar a classe Logger p/ emitir logs ao invés de system.out (como você na primeira parte), assim consegue controlar o nível de logs, formatação e saída p/ arquivo;
    * na primeira parte também, usar um datasource p/ gerenciar as conexões, senão vai entupir o banco de conexão aberta sem usar;

    São detalhes que fazem muita diferença mas a parte que você fez esta ótimo para quem esta começando;

    Responder
    1. brunorota Autor do post

      Opa que bom que gostou Georjuan.

      Obrigado pelas dicas =)

      Mas a intenção do post é realmente para os iniciantes =)

      Até +

      Responder
  2. Lucas P. Caixeta

    Muito bom meu caro!
    Quando a gente escreve para quem sabe menos demostra N coisa, uma delas é de que estamos devolvendo o conhecimento obtido, pq também tivemos ajuda no passado…

    Obrigado por compartilhar!

    Responder
    1. brunorota Autor do post

      Obrigado Lucas

      Também penso assim, já aprendi muita coisa com a comunidade e agora estou compartilhando um pouco do conhecimento obtido com o tempo.

      Até +

      Responder
    1. brunorota Autor do post

      Obrigado Renato

      Que bom que o blog está te ajudando nesse início de jornada.

      Pode deixar que sempre que sobrar um tempinho eu posto coisas novas.

      Até +

      Responder
    1. brunorota Autor do post

      Opa Márcio

      Obrigado, que bom que gostou.

      Pode deixar, assim que eu tiver um tempinho posto uma versão Singleton do ConnectionFactory.

      Até +

      Responder
  3. Douglas Arantes

    Olá Bruno primeiramente gostaria de agradecer pelo trabalho.
    Eu criei a seguinte estrutura:
    Agenda
    src
    br.com.agenda.dao
    br.com.agenda.model
    br.com.rastreador.factory

    E coloquei a classe “TesteAgenda” em pacote default.
    Não entendi o que é a “raiz do meu projeto”, poderia
    me dizer onde exatamente devo colocar a classe “TesteAgenda”

    Seria também uma opção correta coloca-la em pacote chamado:
    br.com.agenda.test ?

    Lembrando que eu consegui executar normalmente a aplicação,
    só quero mesmo saber o local adequado para colocar essa Classe.

    Novamente agradeço, gostei muito desse post.

    Responder
    1. brunorota Autor do post

      Olá Douglas.

      A raiz do seu projeto é a pasta src que fica ali da árvore de diretórios do eclipse.

      Como é pra teste, tanto faz colocar na raiz do projeto ou em um pacote de testes, em um projeto real, as classes para testes normalmente sao colocadas em um pacote teste mesmo.

      Obrigado.

      Até +.

      Responder
  4. Conrado

    Amigo, como incluir JPA nesses códigos.
    Seu tutorial me ajudou em um trabalho de faculdade, mas agora o professor que que se inclua JPA
    Poderia me ajudar?

    Responder
  5. Bruno

    Cara me ajudou muito esse tutorial, muito obrigado!
    Gostaria apenas de tirar uma dúvida quanto ao método UPDATE.
    Se um contato tivesse um numero maior de informações com mais de 10 campos e eu quizesse apenas atualizar alguns campos.
    Como eu faria isso usando o PrepareStatement? Devo sempre mudar o codigo SQL e os parametros do PrepareStat.? Teria alguma outra forma simplificada de fazer isso usando outro método?
    Valeu!!

    Responder
    1. brunorota Autor do post

      Bruno desculpe a demora para responder.

      Olha faz muito tempo que não trabalho com JDBC, mas eu acredito que essa validação você tem que fazer na “mão”.

      Uma API que tem várias funções para facilitar nosso trabalho, inclusive essa função que você citou é o JPA(Java Persistence API).

      Fico contente por ter ajudado de alguma forma.

      Abraçoss.

      Responder
  6. Elton Almeida

    Muito bom jovem, me ajudou muito, fiz algumas alterações para funcionar em java 8
    public ArrayList allPersons(){
    String sql = “select * from persons”;
    ArrayList persons = new ArrayList();
    try(Connection conn = Database.getConnection()){
    PreparedStatement stmt = conn.prepareStatement(sql);
    ResultSet rs = stmt.executeQuery();
    while(rs.next()){

    Person person = new Person(rs.getInt(“id”));
    person.setName(rs.getString(“name”));
    person.setPersonType(new PersonType(rs.getInt(“person_type_id”)));
    person.setCreated( (Date) rs.getDate(“created”));
    person.setModified( (Date) rs.getDate(“modified”));
    persons.add(person);

    }

    }catch(SQLException e){

    }
    return persons;
    }

    Responder
    1. brunorota Autor do post

      Opa Elton,que bom que ajudou =)

      É está meio desatualizado hehehe, mas a idéia é praticamente a mesma pra quem está iniciando.

      Abraços

      Responder
  7. Cícero

    Olá Bruno, tudo bem ?
    Estamos em 2019 e estou eu aqui utilizando o seu tutorial para aprender JAVA.
    Muito legal, estou voltando a escrever sistema depois de alguns anos em outra área e além de conseguir fazer funcionar todas as rotinas ainda consegui entender melhor os conceitos de OOP.
    Muito obrigado!

    Responder

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *