Ajuda com DAO - cadastro e resposta de variavel

19/07/2019

7

Bom dia pelo dia pessoal, estou desenvolvendo web e não estou muito certo sobre minha DAO, onde ela deve fazer o cadastro de uma Pessoa e trazer o "idPessoa" para ser realizado outro cadastro. Seque o código da DAO abaixo:
@Override
    public Boolean cadastrar(Object object) {
        Pessoa pessoa = (Pessoa) object;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        int idPessoa = 0;
        String sql = "INSERT INTO public.pessoa(\\\\\\\\n" +
"	nome_pessoa, email_pessoa, telefone_pessoa, rua_pessoa, numero_pessoa, bairro_pessoa, cpf_pessoa)\\\\\\\\n" +
"	VALUES (?, ?, ?, ?, ?, ?, ?) RETURNING id_pessoa;";
        try {
            stmt = conn.prepareStatement(sql);
            stmt.setString(1, pessoa.getNomePessoa());
            stmt.setString(2, pessoa.getEmailPessoa());
            stmt.setInt(3, pessoa.getTelefonePessoa());
            stmt.setString(5, pessoa.getRuaPessoa());
            stmt.setInt(6, pessoa.getNumeroPessoa());
            stmt.setString(7, pessoa.getBairroPessoa());
            stmt.setString(8, pessoa.getCpfPessoa());
            rs = stmt.executeQuery();
            rs.next();
            idPessoa = rs.getInt("id_pessoa");
            return true;
        } catch (SQLException ex) {
            System.out.println("Problemas ao cadastrar Pessoa! Erro:" + ex.getMessage());
            ex.printStackTrace();
            return false;
        } finally {
            try {
                ConnectionFactory.closeConnection(conn, stmt);
            } catch (Exception ex) {
                System.out.println("Problemas ao fechar conexão! Em:" + ex.getMessage());
                ex.printStackTrace();
            }
        }
    }
Responder

Post mais votado

19/07/2019

voce nao precisa retornar o id da pessoa. é desnecessario. ao menos que voce queira enviar para outra camada para fazer uma consulta posterior. é o caso? se for a assinatura do metodo esta errada. tem que retornar um long ou um int. e o insert tambem esta errado.


@Override
    public int cadastrar(Object object) {
        Pessoa pessoa = (Pessoa) object;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        int idPessoa = 0;
        String sql = "INSERT INTO public.pessoa( " +
"   nome_pessoa, email_pessoa, telefone_pessoa, rua_pessoa, numero_pessoa, bairro_pessoa, cpf_pessoa) " +
"   VALUES (?, ?, ?, ?, ?, ?, ?)";
        try {
            stmt = conn.prepareStatement(sql, stmt.RETURN_GENERATED_KEYS);
            stmt.setString(1, pessoa.getNomePessoa());
            stmt.setString(2, pessoa.getEmailPessoa());
            stmt.setInt(3, pessoa.getTelefonePessoa());
            stmt.setString(5, pessoa.getRuaPessoa());
            stmt.setInt(6, pessoa.getNumeroPessoa());
            stmt.setString(7, pessoa.getBairroPessoa());
            stmt.setString(8, pessoa.getCpfPessoa());
            stmt.execute();
            rs = stmt.getGeneratedKeys();
            while(rs.next()) {
                 return rs.getInt(1);
           }

        } catch (SQLException ex) {
            System.out.println("Problemas ao cadastrar Pessoa! Erro:" + ex.getMessage());
            ex.printStackTrace();
            return -1;
        } finally {
            try {
                ConnectionFactory.closeConnection(conn, stmt);
            } catch (Exception ex) {
                System.out.println("Problemas ao fechar conexão! Em:" + ex.getMessage());
                ex.printStackTrace();
            }
        }
    }
Responder

Mais Posts

19/07/2019

João Júnior

Bom dia pelo dia pessoal, estou desenvolvendo web e não estou muito certo sobre minha DAO, onde ela deve fazer o cadastro de uma Pessoa e trazer o "idPessoa" para ser realizado outro cadastro. Seque o código da DAO abaixo:
@Override
    public Boolean cadastrar(Object object) {
        Pessoa pessoa = (Pessoa) object;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        int idPessoa = 0;
        String sql = "INSERT INTO public.pessoa(\\\\\\\\\\\\\\\\n" +
"	nome_pessoa, email_pessoa, telefone_pessoa, rua_pessoa, numero_pessoa, bairro_pessoa, cpf_pessoa)\\\\\\\\\\\\\\\\n" +
"	VALUES (?, ?, ?, ?, ?, ?, ?) RETURNING id_pessoa;";
        try {
            stmt = conn.prepareStatement(sql);
            stmt.setString(1, pessoa.getNomePessoa());
            stmt.setString(2, pessoa.getEmailPessoa());
            stmt.setInt(3, pessoa.getTelefonePessoa());
            stmt.setString(5, pessoa.getRuaPessoa());
            stmt.setInt(6, pessoa.getNumeroPessoa());
            stmt.setString(7, pessoa.getBairroPessoa());
            stmt.setString(8, pessoa.getCpfPessoa());
            rs = stmt.executeQuery();
            rs.next();
            idPessoa = rs.getInt("id_pessoa");
            return true;
        } catch (SQLException ex) {
            System.out.println("Problemas ao cadastrar Pessoa! Erro:" + ex.getMessage());
            ex.printStackTrace();
            return false;
        } finally {
            try {
                ConnectionFactory.closeConnection(conn, stmt);
            } catch (Exception ex) {
                System.out.println("Problemas ao fechar conexão! Em:" + ex.getMessage());
                ex.printStackTrace();
            }
        }
    }


Por aqui eu faço da seguinte forma:
package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import util.TransacaoBancoDados;

/**
 *
 * @author JFSJUNIOR
 */
public class Pessoa {
    private static final int NULO = 0;
    private static final int CAMPO_PK = 1;
    
    public static int inserir(bean.Pessoa pessoa) throws SQLException{
        int idPessoa = NULO;
        Connection conectaBancoDeDados = TransacaoBancoDados
                .abrirTransacao();
        
        try{
            String stringSQLInsercao = "INSERT INTO Pessoas(nome_pessoa) "
                    + "VALUES(?)";
            
            try(PreparedStatement pstmt = conectaBancoDeDados
                    .prepareStatement(stringSQLInsercao, 
                            PreparedStatement.RETURN_GENERATED_KEYS)){
            
                pstmt.setString(1, pessoa.getNomePessoa());
                pstmt.execute();

                try(ResultSet rstSet = pstmt.getGeneratedKeys()){
                    if(rstSet != null){
                        rstSet.next();
                        idPessoa = rstSet.getInt(CAMPO_PK);
                    }
                }
            }
        }catch(SQLException sqle){
            TransacaoBancoDados.desfazerTransacao();
            System.out.println("ERRO[" + Pessoa.class.getName() 
                    + " - inserção]: " + sqle.getMessage());
        }
        return idPessoa;
    }
    
    public static void atualizar(bean.Pessoa pessoa) throws SQLException{
        Connection conectaBancoDeDados = TransacaoBancoDados
                .abrirTransacao();
        
        try{
            String stringSQLAtualizacao = "UPDATE Pessoas SET nome_pessoa = ? "
                    + "WHERE id_pessoa = ?";
            
            try(PreparedStatement pstmt = conectaBancoDeDados
                    .prepareStatement(stringSQLAtualizacao)){
                
                pstmt.setString(1, pessoa.getNomePessoa());
                pstmt.setInt(2, pessoa.getIdPessoa());
                pstmt.executeUpdate();
            }
        }catch(SQLException sqle){
            TransacaoBancoDados.desfazerTransacao();
            System.out.println("ERRO[" + Pessoa.class.getName() 
                    + " - atualização]: " + sqle.getMessage());
        }
    }
    
    public static void excluir(bean.Pessoa pessoa) throws SQLException{
        Connection conectaBancoDeDados = TransacaoBancoDados
                .abrirTransacao();
        
        try{
            String stringSQLExclusao = "DELETE FROM Pessoas "
                    + "WHERE Pessoas.id_pessoa = ?";
            
            try(PreparedStatement pstmt = conectaBancoDeDados
                    .prepareStatement(stringSQLExclusao)){
                pstmt.setInt(1, pessoa.getIdPessoa());
                pstmt.executeUpdate();
            }
        }catch(SQLException sqle){
            TransacaoBancoDados.desfazerTransacao();
            System.out.println("ERRO[" + Pessoa.class.getName() 
                    + " - exclusão]: " + sqle.getMessage());
        }
    }
}


No caso, a conexão está construída para trabalhar com transação.
Responder

22/07/2019

Hiago

Sim Thiago, eu queria retornar o id para outra camada para poder realizar outro cadastro no meu banco, obrigado pelas observações <3
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira