3.17 DAOPessoaMySQL.java
package br.aiec.persistencia.mysql; import java.sql.Connection; import java.sql.Date; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.LinkedList; import java.util.List; import br.aiec.negocio.Pessoa; import br.aiec.persistencia.IDAOPessoa; /** * A referida classe implementa o padrão Data Access Object para um objeto do * tipo Pessoa para o banco de dados MySQL. * * @author Guilherme Veloso * */ public class DAOPessoaMySQL implements IDAOPessoa { private Connection getConexao() { return new DataSourceMySQL().getConexao(); } /** * O método tem por finalidade inserir um objeto na tabela de pessoa do * banco de dados * * @param Pessoa */ @Override public void inserir(Pessoa pessoa) { // Obtendo a conexão com SGBD Connection conexao = getConexao(); // Query sql para inserir os dados da pessoa no banco String sql = "INSERT INTO tbl_pessoa (nome, dataNascimento) VALUES (?, ?)"; try { // Interface universal da API JDBC PreparedStatement pstmt; // criando o objeto do tipo PreparedStatement a partir da conexão pstmt = conexao.prepareStatement(sql); // Alterando o primeiro simbolo de ? da query pelo nome do parâmetro // do tipo Pessoa pstmt.setString(1, pessoa.getNome()); // Alterando o segundo simbolo de ? da query pela data de nascimento // do parâmetro do tipo Pessoa pstmt.setDate(2, new Date(pessoa.getDataNascimento().getTime())); // Executando a query no banco pstmt.executeUpdate(); // Finalizando a query pstmt.close(); } catch (SQLException e) { throw new RuntimeException( "Falha ao inserir a pessoa na tbl_pessoa", e); } } /** * O método tem por finalidade atualizar uma pessoa (registro) presentes no * banco de dados * * @param Pessoa */ @Override public void atualizar(Pessoa pessoa) { // Obtendo a conexão com SGBD Connection conexao = getConexao(); // Query sql para consultar todas as pessoas do banco String sql = "UPDATE tbl_pessoa SET nome = ?, dataNascimento = ? WHERE id = ?"; try { // Interface universal da API JDBC PreparedStatement pstmt; // criando o objeto do tipo PreparedStatement a partir da conexão pstmt = conexao.prepareStatement(sql); // Alterando o primeiro simbolo de ? da query pelo nome do parâmetro // do tipo Pessoa pstmt.setString(1, pessoa.getNome()); // Alterando o segundo simbolo de ? da query pela data de nascimento // do parâmetro do tipo Pessoa pstmt.setDate(2, new Date(pessoa.getDataNascimento().getTime())); // Alterando o terceiro simbolo de ? da query pelo id do parâmetro // do tipo Pessoa pstmt.setInt(3, pessoa.getId()); // Executando a query no banco pstmt.executeUpdate(); // Finalizando a query pstmt.close(); } catch (SQLException e) { throw new RuntimeException("Falha ao atualizar o registro: " + pessoa.getId(), e); } } /** * O método tem por finalidade excluir uma pessoa (registro) presentes no * banco de dados * * @param Pessoa */ @Override public void excluir(Pessoa pessoa) { // Obtendo a conexão com SGBD Connection conexao = getConexao(); // Query sql para consultar todas as pessoas do banco String sql = "DELETE FROM tbl_pessoa WHERE id = ?"; try { // Interface universal da API JDBC PreparedStatement pstmt; // criando o objeto do tipo PreparedStatement a partir da conexão pstmt = conexao.prepareStatement(sql); // Alterando o primeiro simbolo de ? da query pelo id do parâmetro // do tipo Pessoa pstmt.setInt(1, pessoa.getId()); // Executando a query no banco pstmt.executeUpdate(); // Finalizando a query pstmt.close(); } catch (SQLException e) { throw new RuntimeException("Falha ao exluir o registro: " + pessoa.getId(), e); } } /** * O método tem por finalidade consultar todas as pessoas (registros) * presentes no banco de dados * * @return List<Pessoa> */ @Override public List<Pessoa> consultarTodasPessoas() { // Obtendo a conexão com SGBD Connection conexao = getConexao(); // Query sql para consultar todas as pessoas do banco String sql = "SELECT * FROM tbl_pessoa"; // Lista de retorno que conterá as pessoas registradas no banco List<Pessoa> listPessoas = new LinkedList<Pessoa>(); try { // Interface universal da API JDBC PreparedStatement pstmt; // criando o objeto do tipo PreparedStatement a partir da conexão pstmt = conexao.prepareStatement(sql); // Executando a query no banco ResultSet rs = pstmt.executeQuery(); // Percorrendo o resultado da query while (rs.next()) { // Criando um objeto do tipo Pessoa Pessoa pessoa = new Pessoa(); // Lendo o id(chavve primária) da posição atual e gravando no // objeto // do tipo Pessoa pessoa.setId(rs.getInt("id")); // Lendo o registro nome da posição atual e gravando no objeto // do tipo Pessoa pessoa.setNome(rs.getString("nome")); // Lendo o registro dataNascimento da posição atual e gravando // no objeto do tipo Pessoa pessoa.setDataNascimento(rs.getDate("dataNascimento")); // Adicionando o objeto do tipo pessoa a lista de resultados listPessoas.add(pessoa); } // Finalizando a query pstmt.close(); } catch (SQLException e) { throw new RuntimeException( "Falha ao consultar todas as pessoas na tbl_pessoa", e); } // retornando a lista com todos os registros presentes no banco. return listPessoas; } @Override public Pessoa consultarPessoa(Pessoa parametro) { // Obtendo a conexão com SGBD Connection conexao = getConexao(); // Query sql para consultar todas as pessoas do banco String sql = "SELECT * FROM tbl_pessoa WHERE id = ?"; // Lista de retorno que conterá as pessoas registradas no banco Pessoa resultado = new Pessoa(); try { // Interface universal da API JDBC PreparedStatement pstmt; // criando o objeto do tipo PreparedStatement a partir da conexão pstmt = conexao.prepareStatement(sql); // Alterando o primeiro simbolo de ? da query pelo id do parâmetro // do tipo Pessoa pstmt.setInt(1, parametro.getId()); // Executando a query no banco ResultSet rs = pstmt.executeQuery(); // Percorrendo o resultado da query while (rs.next()) { // Lendo o id(chavve primária) da posição atual e gravando no // objeto // do tipo Pessoa resultado.setId(rs.getInt("id")); // Lendo o registro nome da posição atual e gravando no objeto // do tipo Pessoa resultado.setNome(rs.getString("nome")); // Lendo o registro dataNascimento da posição atual e gravando // no objeto do tipo Pessoa resultado.setDataNascimento(rs.getDate("dataNascimento")); } // Finalizando a query pstmt.close(); } catch (SQLException e) { throw new RuntimeException( "Falha ao consultar todas as pessoas na tbl_pessoa", e); } // retornando a pessoa pesquisada return resultado; } }