Como gravar dados no banco em Java

Como gravar dados no banco em Java

A persistência de dados é um assunto independente da linguagem java para web. Persistir dados em um banco de dados, arquivo ou qualquer outra forma é essencial para qualquer aplicação. Como iremos persistir estes dados é uma decisão importante a ser tomada pelo desenvolvedor.   Nesta aula iremos desenvolver uma forma bastante “primitiva” de persistência de dados e utilizaremos as classes de acesso (DAO – data access object). Estas classes isolam a persistência dos dados e utiliza strings para realizar as operações na base de dados.  

Inicializando um novo projeto

Para o projeto dessa aula iremos utilizar também a arquitetura MVC (model, view, controler). Nesta arquitetura iremos separar cada parte do projeto web para que eles realizem uma função específica. 

  • Model: irá conter as informações de cada entidade do banco de dados, assim como as definições de funções que poderão realizar a manipulação da base.
  • View: é responsável por manipular a interface (HTML) e enviar informações para o controler.
  • Controler: responsável por controlar a camada de view e model contendo as regras de negócio.

Considerando o padrão MVC, iremos criar 3 novos pacotes dentro de nosso projeto de exemplo dessa aula:

Criando um modelo básico de “pessoa”

Após a criação dos pacotes onde iremos guardar nossas classes, iremos começar criando um modelo muito simples de uma “pessoa”. Esta classe é muito utilizada para realizar cadastro de clientes. Veja a implementação:

package Model;

public class Pessoa {

    private int idPessoa;
    private String nomePessoa;
    private String emailPessoa;
    private String senhaPessoa;

    public Pessoa(int idPessoa, String nomePessoa, String emailPessoa, String senhaPessoa) {
        this.idPessoa = idPessoa;
        this.nomePessoa = nomePessoa;
        this.emailPessoa = emailPessoa;
        this.senhaPessoa = senhaPessoa;
    }

    public Pessoa() {
    }

    public int getIdPessoa() {
        return idPessoa;
    }

    public void setIdPessoa(int idPessoa) {
        this.idPessoa = idPessoa;
    }

    public String getNomePessoa() {
        return nomePessoa;
    }

    public void setNomePessoa(String nomePessoa) {
        this.nomePessoa = nomePessoa;
    }

    public String getEmailPessoa() {
        return emailPessoa;
    }

    public void setEmailPessoa(String emailPessoa) {
        this.emailPessoa = emailPessoa;
    }

    public String getSenhaPessoa() {
        return senhaPessoa;
    }

    public void setSenhaPessoa(String senhaPessoa) {
        this.senhaPessoa = senhaPessoa;
    }

    @Override
    public String toString() {
        return "Pessoa{" + "idPessoa=" + idPessoa + ", nomePessoa=" + nomePessoa + ", emailPessoa=" + emailPessoa + ", senhaPessoa=" + senhaPessoa + '}';
    }


}

Criando um controler (DAO)

No pacote denominado Controler iremos armazenar uma classe que utiliza um modelo e realiza a persistência dos dados no banco de dados. Para isso iremos definir 5 funções que são as principais de um sistema (CRUD). São elas: criar, ler por id, ler todos, atualizar e deletar. 

Veja como os protótipos desta classe ficam (ainda sem a implementação da busca na base de dados):

package Controler;

import Model.Pessoa;
import java.util.ArrayList;
import java.util.List;

public class PessoaDAO {
    public boolean criar(Pessoa p) {
        return true;
    }

    public boolean update(Pessoa p) {
        return true;
    }

    public boolean delete(Pessoa p) {
        return true;
    }

    public Pessoa lerPorId(int id) {
        Pessoa p = new Pessoa();
        return p;
    }

    public List<Pessoa> lerTodas() {
        List<Pessoa> listaDePessoas = new ArrayList<>();
        return listaDePessoas;
    }
}




Porém, para criar realizar estas operações é necessário especificar qual a base de dados utilizada, driver, string de conexão e principalmente abrir uma conexão com a base de dados. Então implementaremos uma classe chamada DbConnect que realizará esta conexão e armazenaremos dentro de um novo pacote denominado “Util”.

package Util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DbConnect {
    public static String status = "Não conectou...";
    public DbConnect() {
    }

    public static java.sql.Connection getConexaoMySQL() {
        Connection connection = null;          //atributo do tipo Connection
        try {
            String driverName = "com.mysql.jdbc.Driver";
            Class.forName(driverName);

            String serverName = "localhost";    //caminho do servidor do BD
            String mydatabase = "mysql";        //nome do seu banco de dados
            String url = "jdbc:mysql://" + serverName + "/" + mydatabase;
            String username = "root";        //nome de um usuário de seu BD      
            String password = "12345";      //sua senha de acesso

            connection = DriverManager.getConnection(url, username, password);
            if (connection != null) {
                status = ("STATUS--->Conectado com sucesso!");
            } else {
                status = ("STATUS--->Não foi possivel realizar conexão");
            }
            return connection;
        } catch (ClassNotFoundException e) {  //Driver não encontrado
            System.out.println("O driver expecificado nao foi encontrado.");
            return null;
        } catch (SQLException e) {
            System.out.println("Nao foi possivel conectar ao Banco de Dados.");
            return null;
        }

    }


    public static String statusConection() {
        return status;
    }

    public static boolean FecharConexao() {
        try {
            DbConnect.getConexaoMySQL().close();
            return true;
        } catch (SQLException e) {
            return false;
        }
    }


    public static java.sql.Connection ReiniciarConexao() {
        FecharConexao();
        return DbConnect.getConexaoMySQL();
    }
}


Veja que a classe implementada acima possui métodos de pegar uma conexão e fechar uma conexão. Porém, são métodos estáticos (static) e não precisam de uma instância para serem executados.

O primeiro passo para a persistência de dados é criar uma conexão no controler (conn) e posteriormente criar um statement. A partir do statement criado você poderá executar qualquer operação da base de dados (CRUD).

Veja abaixo como fica o código do comando criar:

public boolean criar(Pessoa p) {
        Connection conn = DbConnect.getConexaoMySQL();
        String insertSQL = "INSERT INTO Pessoa (nomePessoa, senhaPessoa, emailPessoa) VALUES ('"
                + p.getNomePessoa() + "','"
                + p.getSenhaPessoa() + "','"
                + p.getEmailPessoa() + "')";
        try {
            Statement st = conn.createStatement();
            st.executeUpdate(insertSQL);
            return true;
        } catch (SQLException ex) {
            Logger.getLogger(PessoaDAO.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
}

  A seguir, temos o exemplo do comando de realizar uma leitura no banco de dados utilizando um ResultSet como objeto de retorno:

public Pessoa lerPorId(int id) {
    Pessoa p = new Pessoa();
    Connection conn = DbConnect.getConexaoMySQL();
    String selectSQL = "SELECT * FROM Pessoa WHERE idPessoa = " + id;
    try {
        Statement st = conn.createStatement();
        ResultSet rs = st.executeQuery(selectSQL);
        while (rs.next()) {
            p.setNomePessoa(rs.getString("nomePessoa"));
            p.setSenhaPessoa(rs.getString("senhaPessoa"));
            p.setEmailPessoa(rs.getString("emailPessoa"));
        }
    } catch (SQLException ex) {
        Logger.getLogger(PessoaDAO.class.getName()).log(Level.SEVERE, null, ex);
    }
    return p;
}

  Para testarmos a persistência de dados criaremos uma classe no pacote de testes que realizara uma simples adição no banco e consulta.  

public class TestandoPersistencia {
    public static void main(String[] args) {
        Pessoa p = new Pessoa(0, "vinicius", "[email protected]", "12345");
        PessoaDAO pDao = new PessoaDAO();
        pDao.criar(p);
        System.out.println(pDao.lerPorId(1));
    }
}

Exercício

Agora é sua vez… a aula mostrou como criar duas operações do CRUD – Create e Read. Ainda faltam o delete e o Update. Sua tarefa é modificar o código e realizar estas tarefas. Utilize outras classes de teste dentro do pacote “tests”.

 

 

Vinicius dos Santos

Apenas um apaixonado por Ciência da Computação e forma com que ela pode transformar vidas!

Deixe uma resposta